黑马程序员技术交流社区

标题: 反射的总结 [打印本页]

作者: 李明全    时间: 2015-4-26 21:52
标题: 反射的总结
|---定义:就是把java类中的各种成分映射成相应的java类,说白了就是获得一个类里面的成员
        |---获取字节码的方法:1,类名.class(System.class) 2,对象.getClass()  3,Class.forName("类名 比如java.util.Data")
        |---反射是为了实现(代码自己看):1,在运行时判断任意一个对象所属的类。2,在运行时构造任意一个类的对象。
                                3,在运行时判断任意一个类所具有的成员变量和方法。4,在运行时调用任意一个对象的方法
        |---反射与内省区别?
        反射可以操作各种不同的java类,那么内省只是通过反射来操作JavaBean的。JavaBean类里面操作的都是成员变量,都是通过setXXX和getXXX方法
来获取成员变量,这样的类用内省来操作会更简单。
        |---反射及暴力反射  ,获得私有方法代码(这里用到反射)
        暴力反射:类里面的变量私有了,通过普通的getField反射方法无法获得,只能通过getDeclaredField()获得
        代码:package day_7_15;
import java.lang.reflect.Field;
class ReflectPoint{
        private int x ,y;
        ReflectPoint(int x ,int y){
                this.x=x;
                this.y=y;
        }
}
public class ViolenceReflectDemo {
        public static void main(String[] args) throws Exception, Exception{
                ReflectPoint point = new ReflectPoint(3,5);
                //field类代表某个类中的成员变量,这里是私有变量只能通过暴力反射的方法获得,getDeclaredField()方法
                Field field = point.getClass().getDeclaredField("y");//得到了方法看不见方法,需要判断
                //通过方法看见了,但是拿不到
                field.setAccessible(true);
                //y这个还有变量y的变量类对象来获取对象里的y  ,拿到了变量
                System.out.println(field.get(point));
        }
}



作者: 不二情-昊    时间: 2015-4-26 22:11
还没有看到呢
作者: 黄文昭    时间: 2015-4-26 22:22
还没学到这里。
作者: bboyXiaoNuo    时间: 2015-4-26 22:31
还没学到啊,好高深啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2