Java封装在权限控制中的核心应用是通过private属性与带校验逻辑的setter方法实现数据安全管控:属性必须private,setter需嵌入业务规则(如年龄0–150、分数只增不减)。

Java 封装在权限控制中的核心应用,不是指 Web 层的角色菜单权限(如“管理员能进后台”),而是指类内部对数据访问的主动约束与安全管控。它通过访问修饰符 + 方法逻辑组合,实现“谁不能改、怎么改、改什么才合法”的底层防护。
属性一律用 private 修饰
这是封装的第一道防线。所有敏感或需校验的字段(如密码、年龄、余额、状态标志)必须声明为 private,杜绝外部直接赋值。
- 错误写法:
public int age;→ 外部可任意设为 -5 或 200,无校验 - 正确写法:
private int age;→ 只能在本类中被读写,外部必须走方法
getter/setter 不是摆设,要嵌入业务规则
自动生成的 get/set 只是骨架,真正起权限控制作用的是你在 setter 里写的判断逻辑。
- 年龄必须在 0–150 之间:
if (age 150) throw new IllegalArgumentException("年龄非法"); - 分数只能增不能减(防作弊):
if (score - 密码字段只提供
setPassword(),不提供getPassword()(返回 null 或掩码)
用 protected 或 package-private 控制继承与包内协作
当需要子类参与权限逻辑(比如不同学生类型有不同年龄限制),可用 protected 暴露受控方法,而非字段本身。
- 父类定义:
protected void validateAge(int age) { ... } - 子类可重写该方法,定制校验规则,但依然不能绕过父类的 setAge() 流程
- 同包工具类需读取日志级别等配置?用 default(无修饰符) 方法,不对外暴露
构造器私有化 + 静态工厂强化初始化权限
防止非法对象诞生,比运行时校验更前置、更彻底。
- 禁止 new 实例:
private Account() {} - 只允许通过工厂创建:
public static Account create(String userId) { ... 校验用户权限后返回 } - 可结合单例、池化或上下文检查(如当前线程是否持有有效 token)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











