Java封装核心是通过private字段+受控getter/setter建立安全数据通道:setter校验/加密/联动,getter脱敏/不可变/计算,命名须严格遵循JavaBeans规范。

Java 中使用 Getter 和 Setter 实现安全封装,关键不是“加两个 public 方法”,而是通过它们建立可控的数据通道——让读写行为可校验、可审计、可扩展。
私有字段是封装的硬性前提
所有业务字段必须声明为 private,哪怕只是临时变量。一旦暴露为 default、protected 或 public,后续添加校验、日志、脱敏等逻辑时,调用方代码就得跟着改,维护成本陡增。
- 错误示例:
public String password;→ 外部可直接赋值、读取明文 - 正确做法:
private String password;→ 后续所有访问都强制走 getter/setter
Setter 必须承担数据入口责任
setter 是唯一合法的写入入口,不能只做简单赋值,而要嵌入业务规则和防御逻辑。
- 基础校验:年龄在 0–150、手机号符合正则、邮箱格式合法
- 状态联动:修改订单状态时触发事件或更新时间戳
- 拒绝副作用:不在 setter 中查库、发 HTTP、写文件——这些应抽离到 service 层
- 敏感处理:密码字段在 setter 中自动加密(如 BCrypt.encode),而非存明文
Getter 要防泄露、懂取舍
getter 不是“原样交出”,尤其面对集合、数组、敏感字段时,必须主动设防。
立即学习“Java免费学习笔记(深入)”;
- 集合类返回不可变视图:
return Collections.unmodifiableList(this.items); - 敏感字段脱敏:
public String getPassword() { return "***"; }(不提供明文) - 身份证号仅返回后四位:
return "****" + idCard.substring(idCard.length() - 4); - 计算属性不占字段:
public String getFullName() { return firstName + " " + lastName; }
命名与工具要守规范
框架(如 Jackson、Spring)依赖 JavaBeans 规范,命名错一个字母就可能序列化失败或反射失效。
- boolean 基本类型用
isXxx()(如isActive()) - Boolean 包装类型必须用
getXxx()(如getCompleted()),否则 Jackson 无法识别 - Lombok 的
@Data禁用于含密码、身份证等敏感字段的类——需手动控制 getter/setter 行为 - IDE 自动生成时,关闭 IntelliJ 的 “Use ‘is’ prefix for boolean” 选项,避免对 Boolean 字段生成错误方法名


















