Java封装通过私有字段+公共方法组合机制保障状态一致性:私有字段阻断非法直写,公共方法提供校验与联动修改通道,并配合不可变性、防御性拷贝及线程同步策略堵住旁路漏洞。

Java 中封装通过“限制直接访问 + 控制修改入口”的组合机制,保障对象状态的一致性。它不是靠约定或信任,而是用编译期和运行期的强制规则把不安全的操作挡在门外。
私有字段:切断非法直写路径
把成员变量声明为 private,就等于在内存层面加了一道锁。外部类哪怕写 obj.field = xxx,编译器直接报错,连运行机会都没有。比如:
-
private int age;—— 外部无法赋值、无法读取原始值 - 没有 getter/setter 的话,这个字段对外完全“不可见”,更谈不上被误改
- 这相当于操作系统级别的权限控制:不是提醒你别删系统文件,而是根本没给你执行权限
公共方法:唯一可控的修改通道
所有允许的读写操作,必须走类自己定义的 public 方法。这些方法天然成为校验和协调的落点:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 在
setAge(int age)里加判断:if (age 150) throw new IllegalArgumentException(); - 修改余额时同步更新状态标志:
if (amount > 0) { balance += amount; lastUpdated = System.currentTimeMillis(); } - 一次操作可联动多个字段,避免只改一个而遗漏关联项(如改了订单状态却不更新处理时间)
配合不可变与防御性拷贝,堵住旁路漏洞
有些状态一旦创建就不该变,或者外部拿到的只是“快照”而非真实引用:
立即学习“Java免费学习笔记(深入)”;
- 字段用
private final List<String> tags;声明 - getter 返回不可修改视图:
return Collections.unmodifiableList(tags); - 接收集合参数时做防御性拷贝:
this.items = new ArrayList(items); - 这样即使调用方后续修改传入的 list,也不会污染对象内部状态
多线程下保持一致性
没有封装的共享字段,在并发场景中极易出现竞态条件。而封装后,可以集中管控同步策略:
- 在 setter 内部加
synchronized或使用AtomicInteger - 让所有状态变更原子化,避免“读-改-写”中间被其他线程打断
- 返回值也可设计为不可变对象,防止外部线程通过返回引用反向修改

















