商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Java 成员变量的访问与 Getter Setter 封装实战

Java 成员变量的访问与 Getter Setter 封装实战

  发布于2026-07-05 阅读(0)

扫一扫,手机访问

Ja va中成员变量的访问,有一条铁律:不能直接对外暴露,得靠封装来兜底。说白了就是三点——变量私有化、用public方法读写、在方法里把校验逻辑加进去。这套组合拳打好了,数据安全才有保障。

Ja va 成员变量的访问与 Getter Setter 封装实战

为什么必须把变量设为 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 确实省事,但生成之后建议手动加上校验逻辑,别直接交差了事。
本文转载于:https://www.php.cn/faq/2742472.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注