java封装通过private字段+校验型getter/setter实现数据保护,构造器校验初始化合法性,只读字段仅提供getter,集合返回不可修改视图,校验逻辑内聚复用。

Java 中使用封装隐藏内部实现细节并提高代码安全性,关键在于“不让外部直接碰字段,只许走方法”——通过访问控制加逻辑校验,把数据保护和业务规则牢牢焊死在入口处。
用 private 封死字段直连
所有敏感或需约束的数据(如密码、余额、身份证号、年龄)必须声明为 private。这样,即使同包类、子类或调用方代码再“想当然”,写 user.password = "123" 或 account.balance = -500 都会在编译阶段直接报错,从源头杜绝非法赋值。
- 字段不可见:外部无法读取、无法修改、无法反射绕过(除非显式设 accessible,但那已是主动越权行为)
- 构造器也要私有化校验:对象一创建就确保合法,比如传入空姓名、负数年龄、非法邮箱时立即抛
IllegalArgumentException
用带校验的 getter/setter 控制访问路径
public 方法不是摆设,而是唯一受控通道。它不只做“搬运工”,更要承担验证、转换、脱敏等职责:
- setAge(int age):检查是否在 0–150 范围内,超限则拒绝或抛异常
- setPassword(String pwd):校验长度、大小写+数字组合、禁止常见弱口令,并自动加密存储
-
getPassword():绝不返回明文,统一返回
"***"或哈希摘要 -
getIdCard():返回
"**** **** **** 1234"等脱敏格式
按需限制修改能力,明确数据生命周期
不是每个字段都需要可写。封装强调“最小暴露”:
- 只读字段(如订单编号、创建时间):只提供 getter,不写 setter;必要时用 final 修饰,确保初始化后不可变
- 状态变更必须走语义化方法:比如订单不能直接
status = "SHIPPED",而要调用shipOrder(),内部自动校验前置条件、更新时间戳、触发物流通知 - 集合类返回不可修改视图:如
return Collections.unmodifiableList(orders);,防止外部误增删改破坏内部一致性
把校验逻辑内聚,避免散落在业务代码里
把重复校验抽成私有辅助方法,既提升复用性,又让主流程更干净:
- 例如
private boolean isValidMobile(String mobile)统一处理去空格、正则匹配、区号适配 - 构造器、setter、甚至其他 public 方法都复用它,一处修复,全局生效
- 调用方传任意格式手机号(带空格、带+86),只要结果合法,内部始终一致
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











