java中使用getter/setter是为了实现封装:将字段设为private,通过public的get/set方法控制访问,可加入校验、日志等逻辑,避免public字段破坏封装性和业务规则。

Java 中通过 getter 和 setter 方法访问私有属性,本质是利用封装原则:把字段设为 private,再提供公共的、命名规范的方法来读写它。这样既保护数据不被随意修改,又能加入校验、日志、计算等逻辑。
为什么要用 getter/setter?
直接暴露 public 字段会破坏封装性,导致外部代码绕过业务规则随意赋值或读取。比如一个表示年龄的字段,你可能希望限制在 0–150 之间;一个用户名不能为 null 或空字符串。这些约束只能在 setter 里统一控制。
标准写法:命名和访问修饰符
Java Bean 规范约定:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- getter 方法名以
get开头(布尔类型可用is),后接首字母大写的属性名,返回类型与字段一致,无参数,如getName()、isActive() - setter 方法名以
set开头,后接首字母大写的属性名,参数类型与字段一致,返回void,如setName(String name) - 两个方法都应为
public,字段本身必须是private
带校验的 setter 示例
下面是一个带基础校验的完整例子:
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
if (name == null || name.trim().isEmpty()) {
throw new IllegalArgumentException("姓名不能为空");
}
this.name = name.trim();
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age 150) {
throw new IllegalArgumentException("年龄必须在 0 到 150 之间");
}
this.age = age;
}
注意:this.name 是为了区分参数名和字段名;校验逻辑可按需增强,比如正则校验手机号、格式化日期等。
IDE 可自动生成,但别盲目依赖
IntelliJ IDEA、Eclipse 都支持右键 → Generate → Getter and Setter 快速生成。但自动生成的版本通常没有校验逻辑,也不处理空值、线程安全或懒加载等场景。实际开发中,要根据业务需要手动补充关键逻辑,而不是只靠模板。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










