反射

# Class 类对象的获取

在类加载的时候, JVM会创建一个 class 对象。

获取 class 对象有三种方式

  1. 根据类名获取 类名.class
  2. 根据对象获取 对象.getClass()
  3. 根据全限定类名 Class.forName()

# Class 类的方法

|         方法名         |                                            说明                                             |
|:----------------------:|:-------------------------------------------------------------------------------------------:|
|       forName()        |                                  获取class对象的一个引用。                                   |
|   Object.getClass()    |                             返回表示该对象实际类型的Class引用。                               |
|       getName()        |                                      获取全限定类名。                                        |
|    getSimpleName()     |                                  获取不包含包路径的类名。                                    |
|   getCanonicalName()   |                         返回更容易理解的全限定类名,用于日志展示。                             |
|     isInterface()      |                                    判断是否是一个接口。                                      |
|     getInterfaces      |                                返回Class对象实现的所有接口。                                  |
|  getGenericInterfaces  |                          返回class对象实现的接口,包含参数化类型。                             |
|    getSuperclass()     |                           返回Class对象引用的类所继承的直接基类。                              |
| getGenericSuperclass() |                               返回父类类型,包含参数化类型。                                   |
|     newInstance()      | 返回一个Oject对象,是实现“虚拟构造器”的一种途径。使用该方法创建的类,必须带有无参的构造器。        |
1
2
3
4
5
6
7
8
9
10
11
12
13

# Constructor类及其方法

获取Constructor对象是通过Class类中的方法获取的


| 方法返回值            | 方法名                                                | 方法说明                                          |
|:---------------- | -------------------------------------------------- | ------------------------------------------------------- |
| Constructor      | getConstructor(Class<?>... parameterTypes)         | 返回指定参数类型、具有public访问权限的构造函数对象。        |
| Constructor<?>[] | getConstructors()                                  | 返回所有具有public访问权限的构造函数的Constructor对象数组。 |
| Constructor      | getDeclaredConstructor(Class<?>... parameterTypes) | 返回指定参数类型、所有声明的(包括private)构造函数对象。   |
| Constructor<?>[] | getDeclaredConstructor()                           | 返回所有声明的(包括private)构造函数对象。                 |

1
2
3
4
5
6
7
8

Constructor类本身一些常用方法


| 方法返回值 |             方法名              |                                                   方法说明                                              |
|------------|:-------------------------------:|:-----------------------------------------------------------------------------------------------------:|
| Class      |       getDeclaringClass()       | 返回 Class 对象,该对象表示声明由此 Constructor 对象表示的构造方法的类,其实就是返回真实类型(不包含参数类型) |
| Type[]     |   getGenericParameterTypes()    |                按照声明顺序返回一组 Type 对象,返回的就是 Constructor对象构造函数的形参类型。              |
| String     |            getName()            |                                      以字符串形式返回此构造方法的名称。                                  |
| Class<?>[] |       getParameterTypes()       |               按照声明顺序返回一组 Class 对象,即返回Constructor 对象所表示构造方法的形参类型。             |
| T          | newInstance(Object... initargs) |                              使用此 Constructor对象表示的构造函数来创建新实例。                           |
| String     |        toGenericString()        |                              返回描述此 Constructor 的字符串,其中包括类型参数。                          |
1
2
3
4
5
6
7
8
9

# Field类及其方法

通过Class类的提供的方法来获取代表字段信息的Field对象

| 方法返回值 |           方法名称            |                                  方法说明                                |
|------------|:-----------------------------:|:----------------------------------------------------------------------:|
| Field      | getDeclaredField(String name) |         获取指定name名称的(包含private修饰的)字段,不包括继承的字段        |
| Field[]    |      getDeclaredFields()      | 获取Class对象所表示的类或接口的所有(包含private修饰的)字段,不包括继承的字段 |
| Field      |     getField(String name)     |            获取指定name名称、具有public修饰的字段,包含继承字段            |
| Field[]    |          getFields()          |                   获取修饰符为public的字段,包含继承字段                  |
1
2
3
4
5
6
7
8

Field类的常用方法

| 方法返回值 | 方法名称                      | 方法说明                                                                                                                 |
|------------|-------------------------------|------------------------------------------------------------------------------------------------------------------------|
| void       | set(Object obj, Object value) | 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。                                                                  |
| Object     | get(Object obj)               | 返回指定对象上此 Field 表示的字段的值。                                                                                   |
| Class<?>   | getType()                     | 返回一个 Class 对象,它标识了此Field 对象所表示字段的声明类型。                                                             |
| Class<?>   | getDeclaringClass()           | 同getTyp()                                                                   |
| Type       | getGenericType()              | 返回一个类型对象,表示此Field所表示字段的声明类型。 如果类型是参数化类型,则返回的Type对象必须准确反映源代码中使用的实际类型参数。|
| String     | getGenericString()            | 返回一个描述此 Field(包括其一般类型)的字符串                                                                             |
| String     | getName()                     | 返回此 Field 对象表示的字段的名称                                                                                         |
| void       | setAccessible(boolean flag)   | 将此对象的 accessible 标志设置为指示的布尔值,即设置其可访问性                                                               |
1
2
3
4
5
6
7
8
9
10

# Method类及其方法

Class类获取Method对象相关的方法:

| 返回值      | 方法名                                                        | 方法说明                                                                                           |
| -------- |:----------------------------------------------------------:| ---------------------------------------------------------------------------------------------- |
| Method   | getDeclaredMethod(String name, Class<?>... parameterTypes) | 返回一个指定参数的Method对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。                                             |
| Method[] | getDeclaredMethod()                                        | 返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。               |
| Method   | getMethod(String name, Class<?>... parameterTypes)         | 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。                                                 |
| Method[] | getMethods()                                               | 返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。 |
1
2
3
4
5
6

Method类常用方法

| 方法返回值                      | 方法名                                            | 方法说明                                                               |
| -------------------------- |:----------------------------------------------:| ------------------------------------------------------------------ |
| Object                     | invoke(Object obg,Objet...objs)                | 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。                                 |
| Class<?>                   | getReturnType()                                | 返回一个 Class 对象,该对象描述了此 Method 对象所表示的方法的正式返回类型,即方法的返回类型              |
| Type                       | getGenericReturnType()                         | 返回表示由此 Method 对象所表示方法的正式返回类型的 Type 对象,也是方法的返回类型。                   |
| Class<?>[]                 | getParameterTypes()                            | 按照声明顺序返回 Class 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型。即返回方法的参数类型组成的数组 |
| Type[]                     | getGenericParameterTypes()                     | 按照声明顺序返回 Type 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型的,也是返回方法的参数类型     |
| boolean                    | isVarArgs()                                    | 判断方法是否带可变参数,如果将此方法声明为带有可变数量的参数,则返回 true;否则,返回 false。               |
| TypeVariable<Method>[]     | getTypeParameters()                            | 返回一个代表该方法声明中声明的类型变量TypeVariable对象的数组。                  |
| Annotation[]               | getAnnotations()                               | 返回修饰方法的注解类型                                                        |
| <T extends Annotation> T[] | getAnnotationsByType(Class<T> annotationClass) | 返回特定注解类型的注解                                                        |
1
2
3
4
5
6
7
8
9
10
11
上次更新: 2024/11/01, 12:41:19
最近更新
01
docker-compose笔记
01-12
02
MySQL数据迁移
11-27
03
Docker部署服务,避免PID=1
11-27
更多文章>