Java封装通过private字段、校验型setter/getter及不可变设计保障数据完整性与内部安全,而非网络传输安全。

Java 中的封装本身不直接“保证”数据传输安全,但它确实是保障数据完整性与内部安全性最基础、最关键的机制。它的作用不是加密或防网络窃听,而是守住对象这一层的数据入口和出口,防止非法修改、误赋值、状态不一致等内部风险。
用 private 锁死字段访问
这是封装的第一道防线。把关键字段(如密码、余额、身份证号)声明为 private,外部类连编译都过不去,彻底杜绝直接赋值或读取。
- 子类也不能直接访问,避免继承链中意外篡改
- IDE 自动生成的代码(如 Lombok 的 @Data)容易绕过这层保护,需人工检查或替换为 @Getter + @Setter + 自定义逻辑
- 敏感字段绝不使用 default(包私有)或 protected——看似宽松,实则扩大攻击面
在 setter 中强制校验输入
字段私有化后,所有写入必须经过 setter。这里不是简单赋值,而是加一道业务规则过滤:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 年龄限制在 0–150,金额不能为负,手机号格式校验
- 对字符串做非空、去首尾空格、长度限制(如
@NotBlank @Size(max = 20)) - 密码字段在 setter 中不应明文存储,而应立即哈希(如用 BCrypt)
- 构造器里也要做同样校验,防止对象一创建就带非法初始值
用 getter 控制数据输出
读取同样需要防御性设计,尤其面对可变对象:
立即学习“Java免费学习笔记(深入)”;
- 返回
List、Map、数组时,绝不能返回原始引用:return roles;是高危操作 - 正确做法是返回不可变视图:
Collections.unmodifiableList(roles),或新副本:new ArrayList(roles) - 对不可变类型(如
String、LocalDateTime),可放心返回,但字段本身建议加 final,确保构造后不可重赋值
结合不可变对象与 final 字段加固核心数据
对不希望被修改的配置类、实体标识、时间戳等,采用不可变设计:
- 类声明为 final(防止被继承破坏契约)
- 所有字段为 private final,且只在构造器中初始化
- 不提供任何 setter,也不暴露可变容器的引用
- 天然线程安全,避免并发场景下的状态污染

















