java中反射的理解
反射之中包含了一个“反”的概念,所以要想解释反射就必须先从“正”开始解释。一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化对象。但是“反”指的是通过对象找到类,这个对象就是Class对象。
很多书上都说,在Java的世界里,一切皆对象。其实从某种意义上说,在Java中有两种对象:实例对象和Class对象。
实例对象就是我们平常定义的一个类的实例。
而Class对象是没办法用new关键字得到的,因为它是JVM生成用来保存对应类的信息的。换句话说,当我们定义好一个类文件并编译成.class字节码后,编译器同时为我们创建了一个Class对象并将它保存.class文件中。
在Java程序执行的时候,要经历三个步骤:加载、连接和初始化。首先程序要加载到JVM的方法区中,然后进行连接,最后初始化。这里就主要介绍一下类的加载。如上图,首先,JVM会从硬盘中读取Java源文件并将其加载到方法区中同时生成类名.class文件,也就是类对象,这个类对象中包含了我们创建类的实例时所需要的模板信息,也就是源代码中的成员变量和方法等。Class本身也是一个类,它的主要功能之一就是生成类加载时的class文件,为类的初始化及实例化做准备。而我们在程序中通过关键字new创建的对象创建的是类的对象,而不是类对象,二者的区别如图中所示。(最重要的就是类的对象和类对象我们要区分开)
参考文章:https://blog.****.net/qq_39209361/article/details/81239189