1、反射概述
1.1什么是反射
反射就是把Java类中的各个部分,映射成一个个的Java对象,拿到这些对象后可以做一些事情。
既然说反射是反射Java类中的各个组成部分,所以说咱们得知道一个类中有哪儿些部分?
例如,一个类有:成员变量,方法,构造方法,等信息,利用反射技术咱们可以把这些组成部分映射成一个个对象。
1.2、反射能干什么
一般来说反射是用来做框架的,或者说可以做一些抽象度比较高的底层代码,反射在日常的开发中用到的不多,但是咱们还必须搞懂它,因为搞懂了反射以后,可以帮助咱们理解框架的一些原理。所以说有一句很经典的话:反射是框架设计的灵魂。
1.3、怎么得到想反射的类
咱们写的代码是存储在后缀名是 .java的文件里的,但是它会被编译,最终真正去执行的是编译后的 .class文件。Java是面向对象的语言,一切皆对象,所以java认为 这些编译后的 class文件,这种事物也是一种对象,它也给抽象成了一种类,这个类就是Class,大家可以去API里看一下这个类
所以拿到这个类后,就相当于拿到了咱们想解剖的类,那怎么拿到这个类?
看API文档后,有一个方法forName(String className); 而且是一个静态的方法,这样咱们就可以得到想反射的类了。
到这里,看Class clazz = Class.forName(“com.cj.test.Person”);这个应该有点感觉了吧
Class.forName(“com.cj.test.Person”);因为这个方法里接收的是个字符串,字符串的话,我们就可以写在配置文件里,然后利用反射生成我们需要的对象,这才是我们想要的。很多框架里都有类似的配置
2、解剖类
我们知道一个类里一般有构造函数、方法、成员变量(字段/属性)这三部分组成
翻阅API文档,可以看到
Class对象提供了如下常用方法:
public Constructor getConstructor(Class<?>…parameterTypes)
public Method getMethod(String name,Class<?>… parameterTypes)
public Field getField(String name)
public Constructor getDeclaredConstructor(Class<?>…parameterTypes)
public Method getDeclaredMethod(String name,Class<?>… parameterTypes)
public Field getDeclaredField(String name)
这些方法分别用于帮咱们从类中解剖出构造函数、方法和成员变量(属性)。
然后把解剖出来的部分,分别用Constructor、Method、Field对象表示。