Java 成员变量的访问与 Getter Setter 封装实战
作者:BrightSoul
时间:2026-07-05
浏览:0
Java成员变量访问遵循封装原则:变量私有化,通过public的getter和setter方法读写,并在setter中添加校验逻辑。private防止外部直接篡改,getter只暴露必要字段,setter作为数据入口执行校验,确保数据安全与修改灵活性。
Ja va中成员变量的访问,有一条铁律:不能直接对外暴露,得靠封装来兜底。说白了就是三点——变量私有化、用public方法读写、在方法里把校验逻辑加进去。这套组合拳打好了,数据安全才有保障。

为什么必须把变量设为 private?
private 是封装的第一道防线,也是最关键的门槛。它让变量只能在本类内部被访问,外部既不能直接读,也不能直接改,想动手脚?门儿都没有。
- 防止意外篡改,比如有人把年龄设成负数或者一个离谱的大数。
- 避免外部绕过业务规则,比如密码强度检查还没做,就直接把明文存进去了。
- 一旦后续你想改内部实现(比如把 age 拆成 birthYear 和 nowYear 实时计算),调用方完全无感,改接口的代价为零。
Getter 方法怎么写才实用?
不是所有 private 变量都得配 getter。只暴露那些真正需要被外部读取的字段,其余的藏好。
- 基础写法:
public String getName() { return name; },简单直接。 - 敏感字段,比如
passwordHash,一般不建议写 getter——避免日志打印时泄露,也防止内存快照暴露数据。 - 计算型字段,比如
getFullName(),可以直接拼接firstName + lastName,根本不需要对应一个真实变量。 - 集合类,比如
List,getter 应该返回不可修改的视图:return Collections.unmodifiableList(items);,防止外部往里乱塞元素。
Setter 方法不只是赋值,更是守门员
setter 是数据进入对象的入口,也是校验的主战场。千万别让它变成“照单全收”的那种。
- 基础写法:
public void setAge(int age) { if (age >= 0 && age <= 150) { this.age = age; } else { throw new IllegalArgumentException("年龄非法"); } } - 空值检查:
setName(String name)里判断name != null && !name.trim().isEmpty(),空字符串同样不能放过。 - 关联校验:
setStartDate(Date d)可以同步检查新日期是否早于已有的endDate,否则抛异常。 - 不强制配对:有些字段只允许在构造器里初始化,之后禁止修改——那就不写 setter,保持不可变。
实际调用时注意这些细节
封装原理懂了,调用方式也得讲究,否则容易白忙活。
- 别在外部用反射或者 lombok 的
@Data破坏封装意图,除非你清楚后果并愿意承担风险。 - 调用顺序要规范:先
new对象,然后用 setter 赋值,最后用 getter 获取——别试图绕过 setter 直接改字段。 this关键字别漏:当参数名和变量名相同时(比如setName(String name)),必须用this.name = name区分,否则你改的只是参数自己。- IDE 自动生成 getter/setter 确实省事,但生成之后建议手动加上校验逻辑,别直接交差了事。
作者最新文章
索尼 Xperia 1 VIII / VII / VI 等手机获 Android 17 更新,新增桌面模式等功能
2026-09-08 16:44
加拿大留学监护声明书(IMM 5646)双页签署与公证核对指南
2026-09-03 15:02
在线PDF转图片教程:一键生成高清图片包
2026-09-03 12:04
Creo零基础入门:新建零件与第一次拉伸建模完整指南
2026-09-03 06:02
扫描件PDF转Word的在线操作步骤与编辑可行性判断
2026-09-02 18:39
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































