封装通过限制直接访问和提供受控接口保护数据,核心是禁止随意修改:用private隐藏成员变量;setter加入校验逻辑;getter控制读取权限并可脱敏或返回副本;构造方法确保初始状态合法。

封装通过“限制直接访问 + 提供受控接口”的方式来保护数据,核心不是不让改,而是不让随便改。
用 private 隐藏属性
把成员变量声明为 private,外部代码就无法直接读写。比如:
-
private String idCard;—— 外部连“看一眼”都不行 -
student.idCard = "123";—— 编译直接报错
用 setter 方法加入校验逻辑
赋值不靠“=”号,而靠 public 的 setter 方法,在里面做合法性判断:
- 年龄不能为负数或超 150:
if (age < 0 || age > 150) throw new IllegalArgumentException("年龄无效"); - 姓名不能为空或纯空格:
if (name == null || name.trim().isEmpty()) throw ... - 身份证号格式可在校验中调用正则或工具类验证
用 getter 控制读取权限
不是所有字段都要能被读取,也不是都原样返回:
立即学习“Java免费学习笔记(深入)”;
- 敏感字段如密码、身份证号,可以只提供部分脱敏结果(如
return idCard.replaceAll("(\d{4})\d{10}(\w{4})", "$1****$2");) - 某些字段设为只读:只写
getXXX(),不写setXXX(),创建后不可变 - 返回副本而非引用(如
return new ArrayList(this.items);),防止外部修改内部集合
用构造方法确保初始状态合法
对象一诞生就要合规,避免“先造出来再补救”:
- 在构造器里直接调用
setName(name)和setAge(age),复用已有校验逻辑 - 拒绝 null 或非法参数,构造失败即抛异常,不留下半成品对象


















