Java 封装教程:理解面向对象的第一步
在 Java 面向对象编程中,封装(Encapsulation) 是最基础也是最重要的概念之一。它旨在将对象的内部状态隐藏起来,只通过公开的方法(接口)来访问或修改。这种做法可以提高代码的安全性、可维护性和复用性。本文将带你全面理解 Java 中的封装机制、实现方式与最佳实践。
一、什么是封装?
封装的定义很简单:
将数据(属性)和操作数据的方法封装在类中,并通过访问修饰符控制外部访问权限。
封装的核心目标是“隐藏内部实现,暴露对外接口”,从而使对象更加安全、易于维护。
二、为什么要封装?
以下是封装的几个核心优势:
- ✅ 保护数据安全:防止对象的状态被外部非法修改
- ✅ 便于维护和扩展:可以随时修改内部实现,而不影响外部代码
- ✅ 提高代码模块化:将逻辑集中管理,职责清晰
- ✅ 遵循面向对象的最佳实践
三、Java 中封装的实现步骤
步骤 1:将属性声明为 private
私有属性只能在类的内部被访问,外部无法直接修改。
步骤 2:提供 public 的 getter 和 setter 方法
这两个方法分别用于读取和修改私有字段。
四、封装示例:Student 类
public class Student {
// 私有字段
private String name;
private int age;
// 设置姓名
public void setName(String name) {
this.name = name;
}
// 获取姓名
public String getName() {
return name;
}
// 设置年龄(带合法性判断)
public void setAge(int age) {
if (age >= 0 && age <= 150) {
this.age = age;
} else {
System.out.println("年龄不合法!");
}
}
// 获取年龄
public int getAge() {
return age;
}
}
使用该类:
public class Main {
public static void main(String[] args) {
Student stu = new Student();
stu.setName("李雷");
stu.setAge(20);
System.out.println(stu.getName() + " 的年龄是 " + stu.getAge());
}
}
五、封装与访问控制符
Java 提供了 4 种访问修饰符,用于控制类成员的访问权限:
| 访问修饰符 | 当前类 | 同一包 | 子类 | 其他包 |
|---|---|---|---|---|
private | ✔️ | ❌ | ❌ | ❌ |
| 默认(无) | ✔️ | ✔️ | ❌ | ❌ |
protected | ✔️ | ✔️ | ✔️ | ❌ |
public | ✔️ | ✔️ | ✔️ | ✔️ |
在封装中,字段通常使用 private,方法使用 public 来暴露接口。
六、封装的最佳实践
- ✅ 永远将类的字段设为
private - ✅ 提供合法性检查逻辑(如 setter 中校验年龄范围)
- ✅ 只对必要的字段提供 getter 和 setter(不是所有字段都要暴露)
- ✅ 使用注释说明 getter/setter 的功能
- ✅ 对类行为进行抽象,避免暴露内部结构细节
七、使用构造器简化封装
构造器可以在创建对象时初始化字段,从而减少 setter 的调用:
public class Employee {
private String name;
private double salary;
public Employee(String name, double salary) {
this.name = name;
setSalary(salary); // 调用封装的 setter 以使用合法性校验
}
public void setSalary(double salary) {
if (salary >= 0) this.salary = salary;
else System.out.println("工资不能为负!");
}
public double getSalary() {
return salary;
}
}
八、封装 vs. public 字段
有些初学者会直接写成这样:
public class Dog {
public String name;
public int age;
}
这种方式虽然简单,但违背了封装原则,会导致:
- 字段被任意修改,无任何保护
- 程序逻辑混乱、难以维护
- 难以控制数据的合法性
✅ 正确做法是:
private + public getter/setter
九、封装与 JavaBean 标准
JavaBean 是一种符合封装规范的 Java 类,其特点是:
- 所有字段私有
- 提供无参构造器
- 提供标准的
getter/setter方法
这对于框架(如 Spring、Hibernate)非常重要,因为它们会自动调用这些方法来操作对象。
十、总结
Java 封装是 OOP 的基石。掌握封装不仅有助于保护对象的完整性,也为后期系统扩展和模块维护提供极大的便利。封装思想深入理解后,还可以帮助你更好地设计接口、抽象类和系统架构。
📌 练习建议:
- 定义一个
BankAccount类,包含私有字段:accountNumber、balance,并实现存取款功能。 - 实现一个
User类,验证密码长度和邮箱合法性(封装校验逻辑)。
1618

被折叠的 条评论
为什么被折叠?



