温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样用好java封装

发布时间:2026-10-26 20:34:21 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

在 Java 中,**封装(Encapsulation)**是面向对象编程的三大特性之一(封装、继承、多态)。用好封装的核心目标是:隐藏实现细节、暴露必要接口、保护对象状态、提高可维护性。

下面从原则、做法、常见误区、实战示例几个方面说明。


一、封装的核心原则

1. 属性私有化(最重要)

  • 用 private 修饰成员变量
  • 不允许外部直接访问或修改
public class User {
    private String name;
    private int age;
}

2. 提供受控的访问方式

  • 通过 getter / setter 或业务方法暴露行为
  • 在方法中做校验、转换、限制
public void setAge(int age) {
    if (age < 0 || age > 150) {
        throw new IllegalArgumentException("年龄不合法");
    }
    this.age = age;
}

二、如何“用好”封装(进阶做法)

1. 不要滥用 getter / setter

❌ 错误用法:

user.getName().setXxx(); // 外部直接操作内部对象

✅ 更好方式:

  • 只暴露“行为”,不暴露“数据”
user.changeName("Tom");

2. 使用不可变对象(强封装)

适合配置、值对象:

public final class Money {
    private final int amount;

    public Money(int amount) {
        this.amount = amount;
    }

    public int getAmount() {
        return amount;
    }
}

优点:

  • 线程安全
  • 状态不可被篡改

3. 控制构造方式(工厂 / Builder)

避免外部随意创建对象:

public class Order {
    private Order() {}

    public static Order create() {
        return new Order();
    }
}

或 Builder 模式:

Order order = Order.builder()
                   .price(100)
                   .count(2)
                   .build();

4. 隐藏实现细节(包级私有)

  • 使用 default(包私有)或 protected
  • 只暴露必要 public API
class InternalService {
    void process() {}
}

5. 封装“行为”而不是“字段”

❌ 贫血模型:

user.age++;

✅ 富血模型:

user.growUp();

三、常见封装误区

❌ 1. 所有字段都加 getter / setter

→ 等于“公开字段”,毫无封装意义

❌ 2. 返回可变内部对象

public List<String> getList() {
    return this.list; // 外部可修改
}

✅ 正确:

return Collections.unmodifiableList(list);

❌ 3. 把业务逻辑写在调用方

→ 破坏封装,难以维护


四、实际项目中的封装建议

场景 建议
DTO / VO 可适度暴露字段
领域对象 强封装,行为内聚
工具类 私有构造 + 静态方法
配置类 不可变对象
服务类 隐藏实现,暴露接口

五、一句话总结

封装不是“加 private 和 getter”,而是“让别人用你的能力,而不是碰你的数据”。

如果你愿意,我可以:

  • 给你一个真实业务封装示例
  • 对比封装不好 vs 封装好的代码
  • 讲封装在设计模式中的体现

你想从哪一块深入?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手