Java封装通过私有字段、受控方法和内部校验三重机制保障状态合法:private阻断非法赋值;setter嵌入业务校验;getter联动维护一致性;不可变设计彻底禁用变异。

Java 封装通过“私有字段 + 受控方法 + 内部校验”三重机制,让对象自己把关状态是否合法,而不是依赖外部代码的自觉性。
private 字段切断直接篡改路径
把字段声明为 private,不是为了“藏起来好看”,而是物理上阻断非法赋值。比如:
-
private int age;—— 外部写user.age = -5;编译直接报错 - 没有 getter/setter 的话,连读都做不到,更别说改
- 这相当于给数据加了把锁,钥匙(访问入口)只由类自己掌管
setter 方法嵌入业务规则校验
所有修改入口统一收口到 public setter,里面必须做合法性判断:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 年龄设为
setAge(int age):检查age < 0 || age > 150,不合法就抛异常或静默拒绝 - 姓名设为
setName(String name):检查name == null || name.trim().isEmpty() - 金额设为
setBalance(double balance):拒绝负数,或自动截断、四舍五入等处理逻辑
getter 和关联逻辑维护状态一致性
读取和修改都不是孤立动作,封装支持在方法中联动响应:
立即学习“Java免费学习笔记(深入)”;
- getter 不一定原样返回:密码字段
getPassword()返回"***",敏感信息自动脱敏 - setter 中同步更新相关状态:调用
setTotalAmount(...)时,自动置isPaid = false,保证“金额变了,支付状态就得重置”这一业务语义不被破坏 - 创建时间这类只读字段,只提供 getter,不开放 setter,从接口层面杜绝误改
不可变设计彻底封死变异可能
对关键对象(如配置、凭证、坐标),进一步用不可变模式加固:
- 字段全用 private final 修饰
- 构造器一次性初始化,不提供任何 setter
- 若需“修改”,返回新对象(如
withName(String newName)) - 集合类 getter 返回不可修改视图:
Collections.unmodifiableList(list)

















