@@ -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,31 +128,34 @@ 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 */
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();
135135 /**
136- * 获取所有类中所有定义的方法
136+ * 获取 TargetObject 类中定义的所有方法
137137 */
138138 Method [] methods = targetClass. getDeclaredMethods();
139139 for (Method method : methods) {
140140 System . out. println(method. getName());
141141 }
142+
142143 /**
143144 * 获取指定方法并调用
144145 */
145146 Method publicMethod = targetClass. getDeclaredMethod(" publicMethod" ,
146147 String . class);
147148
148149 publicMethod. invoke(targetObject, " JavaGuide" );
150+
149151 /**
150152 * 获取指定参数并对参数进行修改
151153 */
152154 Field field = targetClass. getDeclaredField(" value" );
153155 // 为了对类中的参数进行修改我们取消安全检查
154156 field. setAccessible(true );
155157 field. set(targetObject, " JavaGuide" );
158+
156159 /**
157160 * 调用 private 方法
158161 */
0 commit comments