Java反射:访问和修改私有成员变量
本教程演示了如何使用Java反射机制访问和修改类中不同访问权限的成员变量,包括公有、私有、受保护和默认(包)访问权限的成员变量,并展示了如何使用反射设置成员变量的初始值。
import java.lang.reflect.Field;
public class MyClass {
// 公共访问权限限定符的基本类型成员变量
public int publicInt;
// 私有访问权限限定符的基本类型成员变量
private double privateDouble;
// 受保护访问权限限定符的引用类型成员变量
protected String protectedString;
// 默认(包)访问权限限定符的引用类型成员变量
String defaultString;
public static void main(String[] args) throws Exception {
MyClass obj = new MyClass();
// 获取类的所有成员变量
Field[] fields = MyClass.class.getDeclaredFields();
// 打印各个成员变量的初始值
for (Field field : fields) {
field.setAccessible(true);
System.out.println(field.getName() + ': ' + field.get(obj));
}
// 重新设置各个成员变量的值
for (Field field : fields) {
field.setAccessible(true);
if (field.getType().equals(int.class)) {
field.setInt(obj, 10);
} else if (field.getType().equals(double.class)) {
field.setDouble(obj, 3.14);
} else if (field.getType().equals(String.class)) {
field.set(obj, 'Hello World');
}
}
// 打印重新设置后的成员变量的值
for (Field field : fields) {
field.setAccessible(true);
System.out.println(field.getName() + ': ' + field.get(obj));
}
}
}
上述代码定义了一个名为MyClass
的类,包含了四种访问权限限定符的成员变量:publicInt
是公共访问权限限定符的整型变量,privateDouble
是私有访问权限限定符的双精度浮点型变量,protectedString
是受保护访问权限限定符的字符串变量,defaultString
是默认(包)访问权限限定符的字符串变量。
在main
方法中,使用反射的方式遍历类的所有成员变量,并打印它们的初始值。然后,通过反射重新设置各个成员变量的值,并再次打印它们的值,展示了如何使用反射的方式修改成员变量的值。
原文地址: http://www.cveoy.top/t/topic/TRF 著作权归作者所有。请勿转载和采集!