Java封装的核心作用是可控隐藏——通过private隐藏字段并用带校验的getter/setter控制访问,防止数据被随意篡改,确保对象状态合法且安全。

Java 中封装的核心作用,就是让类的内部细节对外不可见,同时防止数据被随意篡改。它不是靠加密或权限系统,而是通过语言机制和设计约定来实现——关键在于“不让外部直接碰字段,只许走方法”。
把属性设为 private 是第一步
所有需要保护的数据(比如用户密码、账户余额、年龄)都必须声明为 private。这样连同包内的其他类、子类、外部项目都无法直接读写这些字段。
例如:
-
private String password;—— 外部连user.password这种写法都会编译报错 -
private int balance;—— 不能在别处直接执行account.balance = -1000;
用 public 方法控制访问入口
提供 getter 和 setter 方法,但不是简单地“读就返回、写就赋值”,而是在里面嵌入业务规则和安全检查。
立即学习“Java免费学习笔记(深入)”;
常见做法包括:
- 在
setAge(int age)中判断:是否在 1–120 范围内,否则拒绝设置或抛异常 - 在
setPassword(String pwd)中校验长度、字符类型,甚至自动加密存储 - 在
getPassword()中不返回明文,而是返回"***"或哈希摘要 - 对敏感字段(如身份证号),getter 可以做脱敏处理,比如只返回后四位
构造器里也做初始化校验
对象一创建,就要确保初始状态合法。不要把验证逻辑全堆在 setter 里,而忽略构造阶段。
例如:
- 银行账户构造时传入负数余额?直接抛
IllegalArgumentException - 姓名为空字符串?在构造器中就拦截,避免对象处于无效状态
必要时隐藏方法或限制修改路径
不是所有字段都需要 setter。有些数据只允许创建时设定,之后只读(如订单编号、注册时间);有些行为只能由内部触发(如状态变更需走 confirmOrder() 而非直接改 status = "CONFIRMED")。
还可以:
- 把校验逻辑抽成私有辅助方法(
private boolean isValidEmail(String e)),避免重复 - 用
final修饰不可变字段(如private final String userId;) - 对集合类返回不可修改视图:
Collections.unmodifiableList(orders);


















