From 370a6d616c1da6d5a7434ff3618bf2abb490fd2e Mon Sep 17 00:00:00 2001 From: sam Date: Tue, 22 Feb 2022 03:34:41 +0800 Subject: [PATCH 1/2] improve reflection.md: add white space and line feed --- docs/java/basis/reflection.md | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/docs/java/basis/reflection.md b/docs/java/basis/reflection.md index f0dd39e7..5d397f35 100644 --- a/docs/java/basis/reflection.md +++ b/docs/java/basis/reflection.md @@ -63,7 +63,7 @@ public class DebugInvocationHandler implements InvocationHandler { 如果我们动态获取到这些信息,我们需要依靠 Class 对象。Class 类对象将一个类的方法、变量等信息告诉运行的程序。Java 提供了四种方式获取 Class 对象: -**1.知道具体类的情况下可以使用:** +**1. 知道具体类的情况下可以使用:** ```java Class alunbarClass = TargetObject.class; @@ -71,30 +71,30 @@ Class alunbarClass = TargetObject.class; 但是我们一般是不知道具体类的,基本都是通过遍历包下面的类来获取 Class 对象,通过此方式获取 Class 对象不会进行初始化 -**2.通过 `Class.forName()`传入类的路径获取:** +**2. 通过 `Class.forName()`传入类的全路径获取:** ```java Class alunbarClass1 = Class.forName("cn.javaguide.TargetObject"); ``` -**3.通过对象实例`instance.getClass()`获取:** +**3. 通过对象实例`instance.getClass()`获取:** ```java TargetObject o = new TargetObject(); Class alunbarClass2 = o.getClass(); ``` -**4.通过类加载器`xxxClassLoader.loadClass()`传入类路径获取:** +**4. 通过类加载器`xxxClassLoader.loadClass()`传入类路径获取:** ```java Class clazz = ClassLoader.loadClass("cn.javaguide.TargetObject"); ``` -通过类加载器获取 Class 对象不会进行初始化,意味着不进行包括初始化等一系列步骤,静态块和静态对象不会得到执行 +通过类加载器获取 Class 对象不会进行初始化,意味着不进行包括初始化等一系列步骤,静态代码块和静态对象不会得到执行 ### 反射的一些基本操作 -1.创建一个我们要使用反射操作的类 `TargetObject`。 +1. 创建一个我们要使用反射操作的类 `TargetObject`。 ```java package cn.javaguide; @@ -116,7 +116,7 @@ public class TargetObject { } ``` -2.使用反射操作这个类的方法以及参数 +2. 使用反射操作这个类的方法以及参数 ```java package cn.javaguide; @@ -128,17 +128,19 @@ import java.lang.reflect.Method; public class Main { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchFieldException { /** - * 获取TargetObject类的Class对象并且创建TargetObject类实例 + * 获取 TargetObject 类的 Class 对象并且创建 TargetObject 类实例 */ Class tagetClass = Class.forName("cn.javaguide.TargetObject"); TargetObject targetObject = (TargetObject) tagetClass.newInstance(); + /** - * 获取所有类中所有定义的方法 + * 获取 TargetObject 类中定义的所有方法 */ Method[] methods = tagetClass.getDeclaredMethods(); for (Method method : methods) { System.out.println(method.getName()); } + /** * 获取指定方法并调用 */ @@ -146,18 +148,20 @@ public class Main { String.class); publicMethod.invoke(targetObject, "JavaGuide"); + /** * 获取指定参数并对参数进行修改 */ Field field = tagetClass.getDeclaredField("value"); - //为了对类中的参数进行修改我们取消安全检查 + // 为了修改类中的私有字段我们必须取消安全检查 field.setAccessible(true); field.set(targetObject, "JavaGuide"); + /** * 调用 private 方法 */ Method privateMethod = tagetClass.getDeclaredMethod("privateMethod"); - //为了调用private方法我们取消安全检查 + // 为了调用 private 方法我们必须取消安全检查 privateMethod.setAccessible(true); privateMethod.invoke(targetObject); } From b5e19791c6365d0993a704a0d90f6d01965d34f4 Mon Sep 17 00:00:00 2001 From: guide Date: Tue, 22 Feb 2022 15:59:34 +0800 Subject: [PATCH 2/2] Update config.js --- docs/.vuepress/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index c34e8e85..b30f8e48 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -307,7 +307,7 @@ module.exports = config({ }, "api-gateway", "distributed-id", { - title: "rpc", prefix: "rpc/", + title: "RPC", prefix: "rpc/", children: ["dubbo", "why-use-rpc"] }, "distributed-transaction",