Java封装原则要求实体类私有化所有字段、成对提供带校验逻辑的getter/setter、必备无参构造器,并将归属对象的行为封装为public方法。

Java 封装原则在实体类开发中,核心是“隐藏数据、暴露方法、校验入口”,不是简单加个 private 就算完成,而是围绕数据安全与行为可控来组织代码结构。
成员变量必须私有化
所有字段一律用 private 修饰,禁止 public 或 default(包访问)直接暴露。这是封装的起点,也是硬性边界。
- 不写修饰符 ≠ 安全,default 仍可在同包内被随意读写,违背封装本意
- 连
final字段也应 private,例如常量 ID 前缀、状态码枚举引用等 - 集合类型字段(如
List<Role>)要私有 + 初始化,避免外部持有引用导致意外修改
getter/setter 要成对提供且带业务逻辑
标准 JavaBean 规范要求每个 private 字段配套 public 的 getXxx() 和 setXxx(...) 方法,但关键在于 setter 不只是赋值,更是校验入口。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 姓名类字段:setter 中检查 null、空格、长度(如
name != null && name.trim().length() > 0) - 数值类字段:年龄、金额等必须范围校验(
age >= 0 && age <= 150),越界抛IllegalArgumentException - getter 可适度增强:如返回不可变集合(
Collections.unmodifiableList(roles)),防止外部修改内部状态
必须包含无参构造器
框架(如 MyBatis、Spring Boot JSON 绑定、Jackson)依赖无参构造器实例化对象。缺省构造器不是可选项,是实体类能被正常序列化/反序列化的前提。
立即学习“Java免费学习笔记(深入)”;
- 即使你写了带参构造器,也要显式声明
public Student() {} - IDEA 可用
Alt+Insert → Constructor → 无参快速生成 - 若需强制初始化某些字段,可在无参构造器中设默认值(如
this.status = "ACTIVE"),而非删掉它
封装不止于字段,还要考虑行为归属
实体类不是纯数据容器。当某个操作天然属于该对象(比如计算用户积分、生成订单号前缀),就应封装为实体自身的方法,而不是丢给工具类或 Service 层重复判断。
- 示例:
User类可提供isVip()方法,基于会员等级和到期时间封装判断逻辑 - 避免把
user.getLevel() == 5 && user.getExpireTime().after(new Date())散落在多个 service 中 - 这类方法应是 public,但内部只读访问自身 private 字段,不暴露处理细节

















