在底层,是怎么获取到类的相关信息的呢?
首先回顾下JVM加载Java文件的过程:
-
编译阶段,
.java文件会被编译成.class文件,.class文件是一种二进制文件,内容是JVM能够识别的机器码。 -
.class文件里面依次存储着类文件的各种信息,比如:版本号、类的名字、字段的描述和描述符、方法名称和描述、是不是public、类索引、字段表集合,方法集合等等数据。 -
然后,JVM中的类加载器会读取字节码文件,取出二进制数据,加载到内存中,并且解析
.class文件的信息。 -
类加载器会获取类的二进制字节流,在内存中生成代表这个类的
java.lang.Class对象。 -
最后会开始类的生命周期,比如连接、初始化等等。
而反射,就是去操作这个 java.lang.Class对象,这个对象中有整个类的结构,包括属性方法等等。
总结来说就是,.class是一种有顺序的结构文件,而 java.lang.Class对象就是对这种文件的一种表示,所以我们能从Class对象中获取关于类的所有信息,这就是反射的原理。

被折叠的 条评论
为什么被折叠?



