黑马程序员技术交流社区
标题:
关于反射
[打印本页]
作者:
何竹冬
时间:
2013-1-4 19:34
标题:
关于反射
本帖最后由 何竹冬 于 2013-1-6 13:47 编辑
张孝祥老师是在讲反射Field的时候说到暴力反射可以获取私有变量的值,那能不能修改私有变量的值呢 ?
作者:
黄锦成
时间:
2013-1-4 19:59
可以啊,既然你可以得到,对应的也能设置。在学习的时候,不知道的要大胆想象,然后查api
作者:
舒远
时间:
2013-1-4 20:59
Field 类有一个set方法。就是设置字段值的方法。
作者:
焦健
时间:
2013-1-4 20:59
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有想法,只要多动手试试就会找到结果的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2