import java.lang.reflect.Field;
public class Test0 {
/**
* @param args
* @throws SecurityException
* @throws NoSuchFieldException
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Test23 pt1=new Test23(3,5);
//fieldY不代表一个具体的值,每个对象上都可以有fieldY,要用gat方法获取某个对象的值才行
Field fieldY=pt1.getClass().getField("y");
System.out.println(fieldY.get(pt1));
//上面的方法只能获取共有的变量,下面的方法可以用于取出私有变量,暴力反射
Field fieldX=pt1.getClass().getDeclaredField("x");
fieldX.setAccessible(true);
System.out.println(fieldX.get(pt1));//打印得到的值
fieldX.setInt(pt1, 88);//设置得到的私有变量的值
System.out.println(fieldX.get(pt1));//再次打印修改后的值
}
}
class Test23 {
private int x;
public int y;
public Test23(int x, int y) {
super();
this.x = x;
this.y = y;
}
}
试试吧,可以的,学习java有想法,只要多动手试试就会找到结果的。 |