利用反射机制操作私有成员变量(private修饰的变量)
主要代码:
package reflection;
import java.lang.reflect.Field;
public class ByReflectionHandlePrivateVar {
public static void main(String[] args) {
try {
//获取HasPrivateVarEntity的类类型(有些人叫做字节码对象)
Class<HasPrivateVarEntity> c = HasPrivateVarEntity.class;
//newInstance()实例化对象
HasPrivateVarEntity hpve = c.newInstance();
//获取私有成员变量str
Field field = c.getDeclaredField("str");
//成员变量name是私有的,所以得先取消语言访问检查 public void setAccessible(boolean flag)
field.setAccessible(true);
//给str变量赋值
field.set(hpve, "---------设置私有对象字符串----------");
//获得str的值
String str = (String) field.get(hpve);
//toString打印: ---------设置私有对象字符串----------
System.out.println("toString打印: "+str);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
}
}
包含私有成员变量的类
package reflection;
public class HasPrivateVarEntity {
private String str;
public String toString() {
return "HandlePrivateVar [str=" + str + "]";
}
}