反射机制是什么?

来源:互联网 发布:淘宝手机助手登陆失败 编辑:程序博客网 时间:2024/06/07 11:12

反射机制是什么?

一直都知道反射很重要,但是反射就是不知道什么时候用,那是因为对反射理解的不够。

以下是我对反射机制的几个理解,也方便大家去理解。



1.反射机制:就是在程序运行的时候可以检查你所引用对象的切确类型,从而使你可以根据不同的类型

,做出不一样的动作.为什么需要这样的一个机制呢?看一个例子,多态性决定了我们可以通过一个

盛装父类的容器存放对应子类的类型,但是,不同的子类有各自的实现办法。当你对该容器的所有对象

进行共有方法的调用时,你会发现每一个对象都能正确的调用。这里面其实就涉及到了反射机制。



2.Class对象:世间万物都是对象。那么好,当你新建了一个类(注意不是一个类的实例)的时候,

这个类是不是对象呢?肯定是的啦。既然是对象,那么就会有属性,方法。如何获取呢?

我们可以通过反射获得你感兴趣的对象的Class类型信息。然后一切就柳暗花明又一村了。


3.jvm是如何保存类型对象的信息的?其实在我们第一次运行类的时候,都会生成一个后缀为.class的字节码文件

在以后的调用中,类的加载器就是靠着这个文件来判断你需要的对象是否存在,如果存在的话还要验证是否正确。

之后他就知道了每个对象的类型信息了。



4.有时候我们调试会发现,如果类里面有静态成员变量的时候,都是先调用了这个成员变量(因为预加载到内存)

再进行构造函数的调用的。也侧面说明了我们经常使用的构造函数其实是个静态方法,没有static修饰是因为类的

加载器知道它是静态的,所以不用你指定,也不能让你指定(社会总是有一套规章制度的嘛,不然就乱套了)。


5.获取Class的方法。简单粗暴的比如你在包com.hy.test下定义了一个person类,那么你可以通过三种方法获取
(Class.forName(com.hy.test.person)||(new person()).getClass()||person.class)。哈哈,你是不是发现什么了?
我person里边没有class这个属性啊,哪来的?原因在于每个类其实归根到底都是继承者object,那自然都是从这里来的了。
注意基本的数据类型虽然不是继承自object但是它也有class属性。反射获取到的是对应的包装类。建议使用最后一种方法,因为
他能够在编译阶段发现错误,不用捕获异常,最重要的是他的加载方式和前边两种是不一样的,最后一种的方法性能要高效。


1 0