java封装的核心是有选择地暴露,通过private锁住字段、public getter/setter提供受控接口,并依协作范围合理选用访问修饰符,同时将内部逻辑、依赖和敏感操作一并封装。

Java 封装的核心不是“隐藏”,而是“有选择地暴露”——通过访问修饰符划定谁可以读、谁可以改、谁完全不能碰,再配合方法逻辑把关,让数据始终处于可控状态。
用 private 锁住属性,是封装的第一步
成员变量默认不加修饰符就容易被同包其他类随意修改,风险很高。实际开发中,绝大多数字段都应声明为 private:
- 防止外部绕过业务规则直接赋值(比如年龄设成 -5 或 200)
- 确保所有写入都经过 set 方法,便于统一校验、日志或触发联动逻辑
- 后续若需改用计算属性、缓存或数据库映射,只需调整内部实现,调用方代码完全不用动
用 public 的 getter/setter 提供受控接口
不直接暴露字段,而是提供命名清晰的 public 方法:
- get 方法只读返回,可加空值处理或格式转换(如返回副本避免外部篡改 List)
-
set 方法必须做参数校验,例如:
if (age 150) throw new IllegalArgumentException("年龄非法") - 布尔类型建议用
isXxx()命名(如isMarried()),符合 JavaBean 规范,也方便框架识别
按协作范围选对修饰符,不盲目全用 public
不是所有方法都要 public。权限修饰符要匹配真实使用场景:
- private:仅本类内使用的工具方法(如字符串清洗、数值规整)
-
protected:留给子类扩展的行为(如模板方法中的钩子函数
beforeSave()) - default(包级):模块内部协作,比如 DAO 层与实体类在同一个包,某些构建逻辑可包内共享
- public:真正对外提供的能力,比如服务接口、工具类核心方法
封装不止于字段,还包括内部逻辑和依赖
真正的封装意识会延伸到设计层面:
- 把复杂计算或第三方调用封装进 private 方法,主流程保持简洁可读
- 构造器中做必要初始化,避免对象处于半成品状态(如必填字段为空)
- 敏感操作(如密码重置、资金扣减)不暴露原始 setter,而是提供语义化方法
resetPassword(String token)或deductBalance(BigDecimal amount)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











