java学习笔记---反射

it2024-03-18  56

当使用框架去开发时,不需要用到反射的概念,因为被框架写好了。但是如果自己去开发框架,就需要深入理解反射的含义。

反射的定义:将类的成员变量,构造方法,成员方法封装为其他对象

 

1.反射的原理-三个阶段

1.1源代码阶段:

在写类的时候,里面包含了成员变量,构造方法,成员方法三部分。

类通过终端的javac命令进行编译,会把源码编译成一个字节码文件.class,里面包含了该类的成员变量,构造方法,成员方法,在硬盘上储存着,并没有进内存。

也就是说,如果只创建一个类并用javac编译这个类的话,只会停留在第一个阶段。

1.2class类对象阶段(重点)

当你用new要创建一个实例时,.class文件就会先进入第二个阶段,然后就创建这个实例。

类加载器把字节码文件加载进内存后就进入第二阶段。此时有一个类就叫class,称为class类,通过class类创建的对象里面包含了成员变量,构造方法,成员方法等信息,通过三个数组来装。

注意class类是jvm自动创建的。

1.3运行时阶段

用new persom()创建一个实例。

 

2.下面介绍一个常见的使用了class类的例子:

这里会出现System类里的所有的成员方法,那为什么vscode可以知道这个类为什么有哪些方法呢?

因为在定义这个类之后jvm会生成一个class类,里面有这个类所有的方法。

 

3.获取class类的三种方式:

3.1  class.forName(“全类名”)

当你仅仅是定义了一个类,但是还没有实例化一个对象时,只会生成一个字节码文件,储存在硬盘中。

Class.forName(“全类名”):将字节码.class文件从硬盘加载进内存。到了内存以后才可以读取。全类名就是包名加类名。

3.2 通过类名的class属性来获取:类名.class

3.3 通过对象的getClass()方法获取

 

4. class类的对象的功能:

(主要是获取的功能)

1. 获取成员变量们

2.获取构造方法们

3.获取成员方法们

4.获取类名

 

 

 

 

 

 

最新回复(0)