最新消息: 关于Git&GitHub 版本控制你了解多少?
您现在的位置是:群英 > 服务器 > 系统运维 >
反射机制的含义及使用途径
CSDN发表于 2020-09-08 17:29 次浏览
          反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。

Java代码在计算机中经历的三个阶段


        阶段一:Source源代码阶段。意味着经过编译器编译后生成的.class文件还没有加载进内存,还是在硬盘上。

       现在字节码要想变成对象,而对象是内存里边,也就是说需要把字节码加载进内存后才能够有这个对象。

       阶段二:Class类对象阶段。该阶段需要把字节码文件加载进内存的,有一个东西,能够把字节码文件加载进内存,这个东西称为类加载器(对应着Java里的一个对象,ClassLoader)。这个类加载就可以把Person.class文件加载到内存里边。

那在内存里边怎么描述Person.class字节码文件呢?

         在Java里边万物皆对象,所以在内存里边有个对象来描述这个字节码文件,这个对象就是Class类对象(在Java里边有个Class类,这个Class类就是用来描述所有字节码文件的共同特征和行为)。
         不管是什么字节码文件,里边都有成员变量、构造方法、普通方法、成员方法等。因此Class类对象里边有三个重要的部分,第一、所有成员变量,第二、构造方法,第三、成员方法。这三个部分都封装成其他的对象,如成员变量封装为Field对象,构造方法封装为Constructor对象,成员方法封装为Method对象。一个.class字节码文件里边可能有多个成员变量、构造方法或成员方法,所以分别用Field[] feilds数组来描述所有的成员变量,构造方法跟成员方法也一样。那这就是Class类对象。后面通过Class类对象的一些行为就可以创建真正的Person对象。

        阶段三:Runtime运行时阶段。该通过new Person()生成的对象去调用该对象的方法。

知道这个三个阶段后,再回来看反射的概念。

摘自百度百科

Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。

摘自Java黑马57期学习笔记

反射:将类的各个组成部分封装为其他对象,这就是反射机制。

  • 好处:
    1. 可以在程序运行过程中,操作这些对象。
    2. 可以解耦,提高程序的可扩展性。

再来理解下,可以在程序运行过程中,操作这些对象这句话。

应用反射的例子
 

这是IDEA中写的一小段代码,定义一个字符串s,IDEA本身就是个程序,而且是用Java开发的应用程序。那么现在定义的字符串s.操作后,会有一大堆的方法提示,那这些方法从哪儿来的,怎么知道有这些方法呢!这其实就是内部用到了反射机制。

IDEA是这样做的,你定义了字符串s,那IDEA会把字符串这个字节码文件加载进内存,在内存中有Class类对象,Class类对象已经把所有的方法抽取出来了,封装为Method对象,然后把所有方法放到Method[] method数组中,那将来要提示,我们只需要将Method数组里的每一个成员拿出来展示到列表里就可以了。IDEA这个程序一直是在运行的状态,在运行的过程中我们能知道这个字段的对象里边有哪些方法。

通过上述的过程,就有个较为直接地感受到反射机制带来的应用了。


标签:JAVA反射机制
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐