java如何学会封装
理解封装的基本概念
封装是面向对象编程的三大特性之一,核心在于隐藏对象的内部细节,仅对外暴露必要的接口。通过封装可以提高代码的安全性、可维护性和复用性。在Java中,封装通常通过访问修饰符(private、protected、public)和getter/setter方法实现。
使用访问修饰符控制可见性
将类的成员变量声明为private,限制外部直接访问。例如:
public class Person {
private String name;
private int age;
}
private:仅限类内部访问。protected:允许子类和同包类访问。public:完全开放访问。
提供getter和setter方法
通过公共方法间接访问私有变量,实现可控操作:
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
if (name != null) {
this.name = name;
}
}
}
- 在setter中添加验证逻辑(如非空检查)增强安全性。
- getter/setter命名遵循
getXxx/setXxx规范。
封装复杂逻辑
将内部实现细节隐藏在方法中,对外提供简洁接口:
public class BankAccount {
private double balance;
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public boolean withdraw(double amount) {
if (amount <= balance) {
balance -= amount;
return true;
}
return false;
}
}
使用包组织类
通过包(package)进一步控制封装层级:
- 将相关类放在同一包中,使用
protected或默认(无修饰符)权限共享内部成员。 - 不同包的类只能访问
public成员。
实践建议
- 最小化暴露原则:仅公开必要的接口,其他成员尽量设为
private。 - 防御性编程:在setter和方法中添加参数校验。
- 不可变对象:对于不需修改的属性,省略setter或设为
final。 - 工具类封装:使用
final类和私有构造器防止实例化(如Math类)。
示例:完整封装类

public class Student {
private String id;
private double gpa;
public Student(String id) {
this.id = id;
}
public String getId() {
return id;
}
public double getGpa() {
return gpa;
}
public void updateGpa(double newGrade) {
if (newGrade >= 0 && newGrade <= 4.0) {
this.gpa = newGrade;
}
}
}






