注意,以下所有内容均为个人理解,且仅为简单阐述个人观点,如有错误欢迎指正!

一句话解释反射?

本质就是,主动获取一个类的各种信息的行为

不用管是如何获取到信息的,我们只用管是否确实获取了类的信息就行了

谁在执行这个行为?

jvm。

应该吧,因为我感觉idea能够动态检查类中是否有指定成员也是反射吧?因为idea运行期间jvm也在运行嘛,idea能够动态检查类中是否有成员,本质上应该也是通过jvm获取了类的成员数组,idea再从数组中检查是不是真有这个成员,以此来判断编写者是否出错。

为什么是主动?

因为有需求,才会想着主动满足需求。

假如我自定义了一个类,但是这个类既没有被引用也没有被实例化,那么对于jvm来说这个类有用吗?肯定是没用意义的,因为jvm没用到这个类,jvm事实上对这个类没有需求,所以jvm不会想主动了解这个类。

但是如果我用这个类实例化了一个对象,并且用这个类调用了其中的成员方法,而此时jvm需要执行该方法,那么此时jvm对这个类有需求吗?显而易见地有需求,那么jvm才会想着主动获取这个类的一些信息。

获取哪些信息?

强大如他,可以获取的信息有如类的名字,类中成员的名字,成员的权限符,成员方法有哪些参数,甚至是这个类的父类、子类,父类子类的名字······似乎可以无限套娃下去,但获取的无外乎这几种:

1.类的名字

2.类的成员列表

3.成员的权限符

4.方法的形参列表

5.方法的父子类的相关信息

但是请记住一点:有用到的信息才会主动去获取,java的确实反射很强大,但再强大也是建立在具体的需求上的,没有需求的信息便不需要获取,这是基于实用主义的原则,也是基于减少冗余提升性能的考量,jvm性能本来就堪忧你再把cpu放在无关程序的内容上我不敢想了。

常见的方法

貌似八股有点喜欢爱问api😂我就不列了,几个常用的方法记住就得了,以后再补嘛。