Java封装通过private字段、校验型setter、防御性getter和不可变对象四层机制保障数据安全:私有字段杜绝非法访问;setter集成业务校验;getter返回不可变视图或副本;final类与字段确保对象不可变。

Java 中用封装提高数据安全性,核心在于把数据“关进笼子”,再配一把可控的钥匙——不是不让访问,而是不让随意访问。
私有字段是第一道锁
用 private 修饰关键字段(比如密码、余额、身份证号),外部代码连编译都通不过。这比运行时校验更早、更彻底地切断非法写入路径。哪怕子类、同包类或工具类,都无法绕过这层限制。Lombok 的 @Data 自动生成 getter/setter 很方便,但容易忽略字段本身是否该暴露,必须人工核对或改用 @Getter @Setter 加自定义逻辑。
setter 是唯一合法入口,带规则的门禁
所有修改必须走 setter,这就给了你插入手动校验的机会:
- 年龄限定在 0–150,分数卡在 0–100
- 手机号做正则匹配,邮箱验证格式
- 密码字段在 setter 中不存明文,直接哈希(如 BCrypt.hashpw)
- 构造器里同样要做校验,防止对象一出生就带脏数据
getter 不是简单放行,而是防御性输出
读取也得小心:返回 List、Map 或数组时,如果直接返回原始引用,调用方就能偷偷改内部状态。正确做法是返回不可变视图(Collections.unmodifiableList())或新副本(new ArrayList(list))。对 String、LocalDateTime 这类天然不可变类型,可放心返回,但字段本身建议加 final,确保构造后不能重赋值。
立即学习“Java免费学习笔记(深入)”;
不可变对象是终极加固手段
对配置类、凭证信息、时间戳等不希望被变更的核心数据,采用不可变设计:
- 类声明为 final,防止被继承破坏契约
- 所有字段用 final 修饰,只在构造器中初始化
- 不提供任何 setter,也不暴露可变容器的引用
- 天然线程安全,避免并发场景下状态被意外污染
封装不解决网络传输加密,但它守住了对象这一层的数据主权——让非法修改、误操作、状态不一致这些常见风险,在代码层面就被挡在门外。


















