黑马程序员技术交流社区

标题: 关于反射 [打印本页]

作者: 何竹冬    时间: 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