使用private修饰字段可隐藏类的内部状态,防止外部直接访问;2. 提供public的getter和setter方法实现受控的数据访问,并可在setter中加入校验逻辑,确保数据合法性与安全性。

在Java中,类的封装是面向对象编程(OOP)的核心特性之一。通过封装,我们可以隐藏对象的内部状态,仅暴露必要的操作接口,从而提升代码的安全性与可维护性。实现良好的数据保护,关键在于合理使用访问修饰符和提供受控的数据访问方式。
使用private修饰字段
要实现数据保护,第一步是将类中的属性设置为private,防止外部直接访问或修改。这是封装的基础。
例如,一个表示员工的类:
public class Employee {
private String name;
private int salary;
// 其他方法
}
此时,name 和 salary 无法被其他类直接读取或修改,有效避免了非法赋值或意外更改。
立即学习“Java免费学习笔记(深入)”;
提供公共的getter和setter方法
虽然字段被私有化,但外界仍需安全地获取和修改数据。这时应提供public的getter和setter方法,并可在其中加入逻辑校验。
例如:
public String getName() {
return name;
}
public void setName(String name) {
if (name == null || name.trim().isEmpty()) {
throw new IllegalArgumentException("姓名不能为空");
}
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
if (salary < 0) {
throw new IllegalArgumentException("薪资不能为负数");
}
this.salary = salary;
}
通过在setter中添加验证逻辑,确保数据的合法性,防止不合规值进入对象内部。
避免返回可变对象的引用
当类中包含数组或集合等可变类型时,直接通过getter返回原始引用可能导致外部绕过控制修改内部状态。
正确做法是返回副本:
private Listhobbies = new ArrayList<>(); public List getHobbies() { return new ArrayList<>(hobbies); // 返回副本 }
这样即使外部修改返回的列表,也不会影响对象内部的数据,进一步加强数据保护。
基本上就这些。封装不只是加个private那么简单,关键是通过访问控制和方法设计,构建安全、可控的对象交互方式。写代码时多考虑“别人怎么用我这个类”,就能更好地落实数据保护。










