@@ -63,38 +63,38 @@ public class DebugInvocationHandler implements InvocationHandler {
63
63
64
64
如果我们动态获取到这些信息,我们需要依靠 Class 对象。Class 类对象将一个类的方法、变量等信息告诉运行的程序。Java 提供了四种方式获取 Class 对象:
65
65
66
- ** 1.知道具体类的情况下可以使用:**
66
+ ** 1. 知道具体类的情况下可以使用:**
67
67
68
68
``` java
69
69
Class alunbarClass = TargetObject . class;
70
70
```
71
71
72
72
但是我们一般是不知道具体类的,基本都是通过遍历包下面的类来获取 Class 对象,通过此方式获取 Class 对象不会进行初始化
73
73
74
- ** 2.通过 ` Class.forName() ` 传入类的路径获取 :**
74
+ ** 2. 通过 ` Class.forName() ` 传入类的全路径获取 :**
75
75
76
76
``` java
77
77
Class alunbarClass1 = Class . forName(" cn.javaguide.TargetObject" );
78
78
```
79
79
80
- ** 3.通过对象实例` instance.getClass() ` 获取:**
80
+ ** 3. 通过对象实例` instance.getClass() ` 获取:**
81
81
82
82
``` java
83
83
TargetObject o = new TargetObject ();
84
84
Class alunbarClass2 = o. getClass();
85
85
```
86
86
87
- ** 4.通过类加载器` xxxClassLoader.loadClass() ` 传入类路径获取:**
87
+ ** 4. 通过类加载器` xxxClassLoader.loadClass() ` 传入类路径获取:**
88
88
89
89
``` java
90
90
Class clazz = ClassLoader . loadClass(" cn.javaguide.TargetObject" );
91
91
```
92
92
93
- 通过类加载器获取 Class 对象不会进行初始化,意味着不进行包括初始化等一系列步骤,静态块和静态对象不会得到执行
93
+ 通过类加载器获取 Class 对象不会进行初始化,意味着不进行包括初始化等一系列步骤,静态代码块和静态对象不会得到执行
94
94
95
95
### 反射的一些基本操作
96
96
97
- 1.创建一个我们要使用反射操作的类 ` TargetObject ` 。
97
+ 1 . 创建一个我们要使用反射操作的类 ` TargetObject ` 。
98
98
99
99
``` java
100
100
package cn.javaguide ;
@@ -116,7 +116,7 @@ public class TargetObject {
116
116
}
117
117
```
118
118
119
- 2.使用反射操作这个类的方法以及参数
119
+ 2 . 使用反射操作这个类的方法以及参数
120
120
121
121
``` java
122
122
package cn.javaguide ;
@@ -128,31 +128,34 @@ import java.lang.reflect.Method;
128
128
public class Main {
129
129
public static void main (String [] args ) throws ClassNotFoundException , NoSuchMethodException , IllegalAccessException , InstantiationException , InvocationTargetException , NoSuchFieldException {
130
130
/**
131
- * 获取TargetObject类的Class对象并且创建TargetObject类实例
131
+ * 获取 TargetObject 类的 Class 对象并且创建 TargetObject 类实例
132
132
*/
133
- Class<?> targetClass = Class . forName(" cn.javaguide.TargetObject" );
134
- TargetObject targetObject = (TargetObject ) targetClass . newInstance();
133
+ Class<?> tagetClass = Class . forName(" cn.javaguide.TargetObject" );
134
+ TargetObject targetObject = (TargetObject ) tagetClass . newInstance();
135
135
/**
136
- * 获取所有类中所有定义的方法
136
+ * 获取 TargetObject 类中定义的所有方法
137
137
*/
138
138
Method [] methods = targetClass. getDeclaredMethods();
139
139
for (Method method : methods) {
140
140
System . out. println(method. getName());
141
141
}
142
+
142
143
/**
143
144
* 获取指定方法并调用
144
145
*/
145
146
Method publicMethod = targetClass. getDeclaredMethod(" publicMethod" ,
146
147
String . class);
147
148
148
149
publicMethod. invoke(targetObject, " JavaGuide" );
150
+
149
151
/**
150
152
* 获取指定参数并对参数进行修改
151
153
*/
152
154
Field field = targetClass. getDeclaredField(" value" );
153
155
// 为了对类中的参数进行修改我们取消安全检查
154
156
field. setAccessible(true );
155
157
field. set(targetObject, " JavaGuide" );
158
+
156
159
/**
157
160
* 调用 private 方法
158
161
*/
0 commit comments