1. 为什么说你的类成了"公共厕所"?
上周review新同事的代码时,我看到一个触目惊心的User类——所有字段都是public的,十几个外部类直接修改它的内部状态。这就像把类设计成了公共厕所,谁都可以随意进出。这种写法在Java开发中会引发连锁灾难:数据被意外篡改、业务逻辑散落各处、排查bug如同大海捞针。
封装(Encapsulation)作为面向对象三大特性之首,本质上是通过访问控制建立类与外部世界的防火墙。就像你不会把银行卡密码写在便利贴上,类的内部状态也不应该裸奔。合理的封装能让代码具有自我防御能力,我在金融支付系统开发中就深有体会——所有核心业务类的字段都是private的,通过严格的方法控制访问,五年线上运行零数据异常。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 访问修饰符:Java的四大门神
2.1 四种访问权限详解
Java用四个关键字控制访问边界,我把它们比作不同等级的门禁:
java复制public class SecurityDemo {
public String frontDoor = "任何人都可以进出"; // 小区大门
protected String familyDoor = "家人和亲戚可进"; // 自家防盗门
String neighborDoor = "同楼邻居可进"; // 默认权限-楼道门
private String safeBox = "只有自己能开"; // 保险柜
}
实测案例:在电商订单系统中,订单金额(orderAmount)必须用private保护。我曾见过因为用默认权限导致促销模块直接修改金额,造成百万元资损的惨案。
2.2 封装的最佳实践
- 字段一律private:就像你不会公开日记本,字段是类的隐私
- 通过方法控制访问:getter/setter是经过安检的访客通道
- 保护不可变对象:final字段+private实现终极防御
java复制public class BankAccount {
private final String accountId; // 一旦创建不可修改
private BigDecimal balance;
