在 Java 中,private 修饰的成员变量不能直接访问或修改,但可以通过间接方式来修改,常见做法如下:
public / protected 方法(封装)这是标准、安全、推荐的方式。
class Person {
private String name;
// getter
public String getName() {
return name;
}
// setter
public void setName(String name) {
this.name = name;
}
}
Person p = new Person();
p.setName("张三");
System.out.println(p.getName());
✅ 优点
class Person {
private String name;
public Person(String name) {
this.name = name;
}
}
Person p = new Person("李四");
class Outer {
private int x = 10;
class Inner {
void change() {
x = 20; // 内部类可访问外部类 private 成员
}
}
}
可以强行修改 private 值,但破坏封装,有风险。
import java.lang.reflect.Field;
class Person {
private String name = "默认";
}
Person p = new Person();
Field field = Person.class.getDeclaredField("name");
field.setAccessible(true); // 关键
field.set(p, "通过反射修改");
System.out.println(field.get(p));
⚠️ 风险
final| 方式 | 是否推荐 | 说明 |
|---|---|---|
| setter 方法 | ✅✅✅ | 最标准 |
| 构造方法 | ✅✅ | 初始化 |
| 内部类 | ⚠️ | 仅限特殊场景 |
| 反射 | ❌ | 特殊需求(框架、调试) |
private 变量 → 提供 getter / setter → 通过方法修改
如果你有具体代码场景(比如 Spring、Lombok、JSON 反序列化、单元测试),可以贴出来,我可以帮你选最合适的修改方式。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。