@@ -63,38 +63,38 @@ public class DebugInvocationHandler implements InvocationHandler {
6363
6464如果我们动态获取到这些信息,我们需要依靠 Class 对象。Class 类对象将一个类的方法、变量等信息告诉运行的程序。Java 提供了四种方式获取 Class 对象:
6565
66- ** 1.知道具体类的情况下可以使用:**
66+ ** 1. 知道具体类的情况下可以使用:**
6767
6868``` java
6969Class alunbarClass = TargetObject . class;
7070```
7171
7272但是我们一般是不知道具体类的,基本都是通过遍历包下面的类来获取 Class 对象,通过此方式获取 Class 对象不会进行初始化
7373
74- ** 2.通过 ` Class.forName() ` 传入类的路径获取 :**
74+ ** 2. 通过 ` Class.forName() ` 传入类的全路径获取 :**
7575
7676``` java
7777Class alunbarClass1 = Class . forName(" cn.javaguide.TargetObject" );
7878```
7979
80- ** 3.通过对象实例` instance.getClass() ` 获取:**
80+ ** 3. 通过对象实例` instance.getClass() ` 获取:**
8181
8282``` java
8383TargetObject o = new TargetObject ();
8484Class alunbarClass2 = o. getClass();
8585```
8686
87- ** 4.通过类加载器` xxxClassLoader.loadClass() ` 传入类路径获取:**
87+ ** 4. 通过类加载器` xxxClassLoader.loadClass() ` 传入类路径获取:**
8888
8989``` java
9090Class clazz = ClassLoader . loadClass(" cn.javaguide.TargetObject" );
9191```
9292
93- 通过类加载器获取 Class 对象不会进行初始化,意味着不进行包括初始化等一系列步骤,静态块和静态对象不会得到执行
93+ 通过类加载器获取 Class 对象不会进行初始化,意味着不进行包括初始化等一系列步骤,静态代码块和静态对象不会得到执行
9494
9595### 反射的一些基本操作
9696
97- 1.创建一个我们要使用反射操作的类 ` TargetObject ` 。
97+ 1 . 创建一个我们要使用反射操作的类 ` TargetObject ` 。
9898
9999``` java
100100package cn.javaguide ;
@@ -116,7 +116,7 @@ public class TargetObject {
116116}
117117```
118118
119- 2.使用反射操作这个类的方法以及参数
119+ 2 . 使用反射操作这个类的方法以及参数
120120
121121``` java
122122package cn.javaguide ;
@@ -128,36 +128,40 @@ import java.lang.reflect.Method;
128128public class Main {
129129 public static void main (String [] args ) throws ClassNotFoundException , NoSuchMethodException , IllegalAccessException , InstantiationException , InvocationTargetException , NoSuchFieldException {
130130 /**
131- * 获取TargetObject类的Class对象并且创建TargetObject类实例
131+ * 获取 TargetObject 类的 Class 对象并且创建 TargetObject 类实例
132132 */
133133 Class<?> tagetClass = Class . forName(" cn.javaguide.TargetObject" );
134134 TargetObject targetObject = (TargetObject ) tagetClass. newInstance();
135+
135136 /**
136- * 获取所有类中所有定义的方法
137+ * 获取 TargetObject 类中定义的所有方法
137138 */
138139 Method [] methods = tagetClass. getDeclaredMethods();
139140 for (Method method : methods) {
140141 System . out. println(method. getName());
141142 }
143+
142144 /**
143145 * 获取指定方法并调用
144146 */
145147 Method publicMethod = tagetClass. getDeclaredMethod(" publicMethod" ,
146148 String . class);
147149
148150 publicMethod. invoke(targetObject, " JavaGuide" );
151+
149152 /**
150153 * 获取指定参数并对参数进行修改
151154 */
152155 Field field = tagetClass. getDeclaredField(" value" );
153- // 为了对类中的参数进行修改我们取消安全检查
156+ // 为了修改类中的私有字段我们必须取消安全检查
154157 field. setAccessible(true );
155158 field. set(targetObject, " JavaGuide" );
159+
156160 /**
157161 * 调用 private 方法
158162 */
159163 Method privateMethod = tagetClass. getDeclaredMethod(" privateMethod" );
160- // 为了调用private方法我们取消安全检查
164+ // 为了调用 private 方法我们必须取消安全检查
161165 privateMethod. setAccessible(true );
162166 privateMethod. invoke(targetObject);
163167 }
0 commit comments