Java封装的核心是用private隐藏字段并提供带校验的getter/setter方法,以保护对象状态、控制访问逻辑;只读字段可省setter,只写或计算属性按需设计,private体现设计契约而非绝对安全。

Java 封装的核心就是用 private 修饰符把类的字段(成员变量)设为私有,再通过公共的 getter 和 setter 方法控制外部对这些字段的访问——既保护了内部状态不被随意修改,又保留了必要的操作入口。
为什么用 private 隐藏字段?
直接暴露字段会导致对象状态失控。比如一个 BankAccount 类,如果 balance 是 public,别人就能写 account.balance = -1000;,绕过余额校验逻辑。用 private 后,这个字段只能在本类内部访问,外部必须走你设计好的方法,从而把校验、日志、通知等逻辑“卡”在入口处。
怎么写标准的封装结构?
以一个表示人的简单类为例:
public class Person {
private String name;
private int age;
// getter:只读访问
public String getName() {
return name;
}
// setter:带校验的写入
public void setAge(int age) {
if (age 150) {
throw new IllegalArgumentException("年龄必须在 0~150 之间");
}
this.age = age;
}
}
立即学习“Java免费学习笔记(深入)”;
- 字段加 private,彻底屏蔽外部直接读写
- getter 方法名习惯是
getXxx(),返回值类型与字段一致,不带参数,不做修改 - setter 方法名是
setXxx(类型 xxx),通常包含合理性检查(如非空、范围、格式) - 方法体内用
this.xxx = xxx;区分参数和字段
哪些情况可以不写 setter 或 getter?
封装不是机械套模板,而是按需控制访问权限:
- 只读字段:比如创建后就不能改的 ID,只提供
getId(),不写setId() - 只写字段:极少见,但如密码重置令牌,可能只允许设一次,设完即失效,可提供
resetToken()而非通用 setter - 计算属性:如
getFullName()不对应任何字段,而是拼接firstName + " " + lastName,这也属于封装——隐藏了组合逻辑
注意:private 不等于“完全不可见”
private 只限制语法层面的直接访问,不阻止反射或序列化等机制绕过。但在日常开发中,它传递的是明确的设计契约:「请遵守我提供的 API,别碰我的字段」。IDE 和编译器会帮你守住这道线,团队协作和代码可维护性就靠这个约定来保障。


















