java封装是通过private字段+public getter/setter+包级权限构建“可读可控、可写有验”的数据防护边界:private阻断直接访问,getter提供受控只读(含副本返回、脱敏、缓存),setter校验写入(年龄、邮箱、状态等),default/protected实现分层可见性。

封装在 Java 中不是简单地把字段设成 private 就完事,而是通过访问权限控制 + 显式接口设计,构建一道“可读可控、可写有验”的数据防护边界。
用 private 封死直接访问通道
所有核心数据字段必须声明为 private,这是封装的起点。一旦加上 private,外部类哪怕在同一包内,也无法用点号直接读写:
-
student.age = -5;→ 编译报错,彻底阻断非法赋值 -
System.out.println(student.name);→ 同样报错,无法绕过逻辑直接窥探
用 public getter 提供受控只读入口
如果允许外部获取值,就提供 public 的 getter 方法。它不只是“返回字段”,还可加入逻辑:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 返回副本而非引用(防止外部修改内部数组或集合)
- 对敏感字段做脱敏处理(如身份证号中间四位打 *)
- 延迟计算或缓存结果(如
getFullName()拼接姓与名)
用带校验的 setter 控制写入行为
setter 是数据进入对象的唯一合法闸口。所有赋值都必须经过它,并嵌入业务规则:
- 年龄限制:
if (age 150) throw new IllegalArgumentException("年龄不合法"); - 邮箱格式校验:
if (!email.contains("@")) { ... } - 状态流转控制:
if ("已发货".equals(oldStatus) && !"已完成".equals(newStatus)) { ... }
结合包级权限细化可见范围
private 太严,public 又太松?可以用 default(包级私有) 或 protected 做分层控制:
- 工具类与实体类同包时,用 default 方法供内部协作,不对外暴露
- 子类需要扩展行为(如重写
calculateBonus()),父类用 protected 声明该方法 - 不同模块之间靠 package 边界隔离,避免跨包误调用内部逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










