Java反射(Class类)常用方法(附Xmind整理)

news/2024/5/19 3:31:13 标签: class, 反射, java
class="baidu_pl">
class="article_content clearfix">
class="markdown_views prism-atom-one-dark">

class="toc">

文章目录

    • 一、类加载器
        • 1、Java类加载机制
        • 2、ClassLoader类加载器
    • 二、获取Class对象的方式
        • 1、Class.forName("全类名")
        • 2、类名.class
        • 3、对象.getClass()
    • 三、常用方法:
        • 1、获取构造方法、成员方法、成员变量(公开的public)
        • 2、获取构造方法、成员方法、成员变量(所有的public+private)
        • 3、获取名称
        • 4、获取父接口
        • 5、获取实现的接口
        • 6、实例化为新对象
        • 7、返回此元素上存在的所有注释
        • 8、返回此类的包(package com.lydms.classes)
        • 9、查找带有给定名称的资源(打印绝对路径)
        • 10、判断类型
    • 四、案例
        • 1、获取对应的名称
        • 2、获得类的简称(HashMap)
        • 3.实例化Class对象
        • 4、获取一个对象的父接口和实现的接口
        • 5、反射机制实例化一个类的对象
        • 6、获取某个类的全部属性
        • 7、获取某个类的全部属性(修饰符,入参,返回值)
        • 8、通过反射机制调用某个类的方法
        • 9、更改类中属性
        • 10、执行配置文件中指定的类中方法
        • 11、通过反射机制往List中添加任意类型的元素
        • 12、更改方法上注解值
    • 五、Xmind整理


一、类加载器

1、Java类加载机制

  1. 加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口。
  2. 链接:将java类的二进制代码合并到 jvm的运行状态之中的过程,链接过程又分为3个过程:
    1. 验证:确保加载的类信息符合jvm规范,没有安全方面的问题。
    2. 准备:正式为类变量(static变量)分配内存并设置类变量初始值的阶段, 这些内存都将在方法区中进行分配。
    3. 解析:虚拟机常量池内的符号引用替换为直接引用的过程。(比如String s =“aaa”,转化为 s的地址指向“aaa”的地址)
  3. 初始化:初始化阶段是执行类构造器方法的过程。类构造器方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static块)中的语句合并产生的。当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先初始化其父类的初始化虚拟机会保证一个类的构造器方法在多线程环境中被正确加锁和同步 当访问一个java类的静态域时,只有真正声明这个静态变量的类才会被初始 化。

Java类的生命周期:
在这里插入图片描述

2、ClassLoader类加载器

ClassLoader类加载器的作用就是将 .class 文件加载到JVM虚拟机中去。

class="prism language-java">class="token keyword">package comclass="token punctuation">.lydmsclass="token punctuation">.testclass="token punctuation">;

class="token keyword">public class="token keyword">class class="token class-name">ClassLoaderDemo class="token punctuation">{
    class="token keyword">public class="token keyword">static class="token keyword">void class="token function">mainclass="token punctuation">(Stringclass="token punctuation">[class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws ClassNotFoundException class="token punctuation">{

        class="token comment">//获取类加载器
        ClassLoader classLoader class="token operator">= ClassLoaderDemoclass="token punctuation">.class="token keyword">classclass="token punctuation">.class="token function">getClassLoaderclass="token punctuation">(class="token punctuation">)class="token punctuation">;

        class="token comment">//常用三种方式加载类
        class="token comment">// 使用ClassLoader.loadClass()来加载类,不会执行初始化块
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"‐‐ClassLoader.loadClass()‐‐"class="token punctuation">)class="token punctuation">;
        classLoaderclass="token punctuation">.class="token function">loadClassclass="token punctuation">(class="token string">"com.lydms.test.Test1"class="token punctuation">)class="token punctuation">;

        class="token comment">//  使用Class.forName(clssName) 来加载类,默认会执行初始化块
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"‐‐Class.forName(clssName)‐‐"class="token punctuation">)class="token punctuation">;
        Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(class="token string">"com.lydms.test.Test2"class="token punctuation">)class="token punctuation">;

        class="token comment">//  使用Class.forName(className, initialize, ClassLoader) 来加载类,并指定ClassLoader,初始化时不执行静态块.
        class="token comment">//  参数:类名,是否初始化,类加载器
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"‐‐Class.forName(className,initialize,ClassLoader)‐‐"class="token punctuation">)class="token punctuation">;
        Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(class="token string">"com.lydms.test.Test3"class="token punctuation">, class="token boolean">falseclass="token punctuation">, classLoaderclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}

class="token keyword">class class="token class-name">Test1 class="token punctuation">{
    class="token keyword">static class="token punctuation">{
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"Test1 静态初始化块"class="token punctuation">)class="token punctuation">;

    class="token punctuation">}
class="token punctuation">}

class="token keyword">class class="token class-name">Test2 class="token punctuation">{
    class="token keyword">static class="token punctuation">{
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"Test2 静态初始化块"class="token punctuation">)class="token punctuation">;

    class="token punctuation">}
class="token punctuation">}

class="token keyword">class class="token class-name">Test3 class="token punctuation">{
    class="token keyword">static class="token punctuation">{
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"Test3 静态初始化块"class="token punctuation">)class="token punctuation">;

    class="token punctuation">}
class="token punctuation">}

二、获取Class对象的方式

1、Class.forName(“全类名”)

通过指定的字符串路径获取

class="prism language-java">Classclass="token operator"><class="token operator">?class="token operator">> aClass class="token operator">= Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(class="token string">"com.lydms.classes.TestFiled"class="token punctuation">)class="token punctuation">;

class_77">2、类名.class

通过类名的属性class获取

class="prism language-java">Classclass="token generics function">class="token punctuation"><ArrayListclass="token punctuation">> arrayListClass class="token operator">= ArrayListclass="token punctuation">.class="token keyword">classclass="token punctuation">;

3、对象.getClass()

通过对象的getClass()方法获取

class="prism language-java">Classclass="token operator"><class="token operator">? class="token keyword">extends class="token class-name">TestFiledclass="token operator">> aClass class="token operator">= class="token keyword">new class="token class-name">TestFiledclass="token punctuation">(class="token punctuation">)class="token punctuation">.class="token function">getClassclass="token punctuation">(class="token punctuation">)class="token punctuation">;

三、常用方法:

字节码文件Class类Class.forName()
构造方法Constructor类getConstructor()
成员方法Method类getMethod()
成员变量Field类getField()

首先获取该类的class对象

class="prism language-java">Classclass="token operator"><class="token operator">?class="token operator">> aClass class="token operator">= Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(class="token string">"com.lydms.classes.TestFiled"class="token punctuation">)class="token punctuation">;

1、获取构造方法、成员方法、成员变量(公开的public)

class="prism language-java">class="token comment">//  构造方法
Constructorclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] constructors class="token operator">= aClassclass="token punctuation">.class="token function">getConstructorsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token comment">//  成员方法
Methodclass="token punctuation">[class="token punctuation">] methods class="token operator">= aClassclass="token punctuation">.class="token function">getMethodsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token comment">//  成员变量
Fieldclass="token punctuation">[class="token punctuation">] fields class="token operator">= aClassclass="token punctuation">.class="token function">getFieldsclass="token punctuation">(class="token punctuation">)class="token punctuation">;

2、获取构造方法、成员方法、成员变量(所有的public+private)

class="prism language-java">class="token comment">//  构造方法
Constructorclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] declaredConstructors class="token operator">= aClassclass="token punctuation">.class="token function">getDeclaredConstructorsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token comment">//  成员方法
Methodclass="token punctuation">[class="token punctuation">] declaredMethods class="token operator">= aClassclass="token punctuation">.class="token function">getDeclaredMethodsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token comment">//  成员变量
Fieldclass="token punctuation">[class="token punctuation">] declaredFields class="token operator">= aClassclass="token punctuation">.class="token function">getDeclaredFieldsclass="token punctuation">(class="token punctuation">)class="token punctuation">;

3、获取名称

class="prism language-java">String name class="token operator">= aClassclass="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token comment">//  返回源代码中给出的底层类的简称。
String simpleName class="token operator">= aClassclass="token punctuation">.class="token function">getSimpleNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;
String typeName class="token operator">= aClassclass="token punctuation">.class="token function">getTypeNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;

4、获取父接口

class="prism language-java">Classclass="token operator"><class="token operator">?class="token operator">> superclass class="token operator">= aClassclass="token punctuation">.class="token function">getSuperclassclass="token punctuation">(class="token punctuation">)class="token punctuation">;

5、获取实现的接口

class="prism language-java">Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] interfaces class="token operator">= aClassclass="token punctuation">.class="token function">getInterfacesclass="token punctuation">(class="token punctuation">)class="token punctuation">;

6、实例化为新对象

class="prism language-java">Object newInstance class="token operator">= aClassclass="token punctuation">.class="token function">newInstanceclass="token punctuation">(class="token punctuation">)class="token punctuation">;

7、返回此元素上存在的所有注释

返回此元素上存在的所有注释(public)

class="prism language-java">RestController annotation class="token operator">= aClassclass="token punctuation">.class="token function">getAnnotationclass="token punctuation">(RestControllerclass="token punctuation">.class="token keyword">classclass="token punctuation">)class="token punctuation">;
class="token comment">//  获取所有
Annotationclass="token punctuation">[class="token punctuation">] annotations class="token operator">= aClassclass="token punctuation">.class="token function">getAnnotationsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token keyword">for class="token punctuation">(class="token keyword">int i class="token operator">= class="token number">0class="token punctuation">; i class="token operator">< annotationsclass="token punctuation">.lengthclass="token punctuation">; iclass="token operator">++class="token punctuation">) class="token punctuation">{
    Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(annotationsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">toStringclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;
class="token punctuation">}

返回此元素上存在的所有注释(public+private)

class="prism language-java">RestController declaredAnnotation class="token operator">= aClassclass="token punctuation">.class="token function">getDeclaredAnnotationclass="token punctuation">(RestControllerclass="token punctuation">.class="token keyword">classclass="token punctuation">)class="token punctuation">;
class="token comment">//  获取所有
Annotationclass="token punctuation">[class="token punctuation">] aas class="token operator">= aClassclass="token punctuation">.class="token function">getDeclaredAnnotationsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token keyword">for class="token punctuation">(class="token keyword">int i class="token operator">= class="token number">0class="token punctuation">; i class="token operator">< aasclass="token punctuation">.lengthclass="token punctuation">; iclass="token operator">++class="token punctuation">) class="token punctuation">{
    Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(aasclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">toStringclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;
class="token punctuation">}

classes_180">8、返回此类的包(package com.lydms.classes)

class="prism language-java">String packUrl class="token operator">= aClassclass="token punctuation">.class="token function">getPackageclass="token punctuation">(class="token punctuation">)class="token punctuation">.class="token function">toStringclass="token punctuation">(class="token punctuation">)class="token punctuation">;

9、查找带有给定名称的资源(打印绝对路径)

class="prism language-java">URL resource class="token operator">= aClassclass="token punctuation">.class="token function">getResourceclass="token punctuation">(class="token string">"TestFiled.class"class="token punctuation">)class="token punctuation">;
Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(resourceclass="token punctuation">.class="token function">getPathclass="token punctuation">(class="token punctuation">)class="token punctuation">.class="token function">toStringclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;

10、判断类型

class="prism language-java">class="token comment">//  是否为数组类
class="token keyword">boolean isArray class="token operator">= aClassclass="token punctuation">.class="token function">isArrayclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token comment">//  是否为接口类
class="token keyword">boolean isInterface class="token operator">= aClassclass="token punctuation">.class="token function">isInterfaceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token comment">//  是否为枚举类
class="token keyword">boolean isEnum class="token operator">= aClassclass="token punctuation">.class="token function">isEnumclass="token punctuation">(class="token punctuation">)class="token punctuation">;

四、案例

1、获取对应的名称

class="prism language-java">class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;

通过一个对象获得完整的包名+类名(java.util.HashMap)

class="prism language-java">HashMapclass="token generics function">class="token punctuation"><Stringclass="token punctuation">, Stringclass="token punctuation">> hashMap class="token operator">= class="token keyword">new class="token class-name">HashMapclass="token operator"><class="token operator">>class="token punctuation">(class="token punctuation">)class="token punctuation">;
String name class="token operator">= hashMapclass="token punctuation">.class="token function">getClassclass="token punctuation">(class="token punctuation">)class="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;
Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(nameclass="token punctuation">)class="token punctuation">;

2、获得类的简称(HashMap)

class="prism language-java">class="token function">getSimpleNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;

获得类的简称(HashMap)

class="prism language-java">HashMapclass="token generics function">class="token punctuation"><Stringclass="token punctuation">, Stringclass="token punctuation">> hashMap class="token operator">= class="token keyword">new class="token class-name">HashMapclass="token operator"><class="token operator">>class="token punctuation">(class="token punctuation">)class="token punctuation">;
String typeName class="token operator">= hashMapclass="token punctuation">.class="token function">getClassclass="token punctuation">(class="token punctuation">)class="token punctuation">.class="token function">getSimpleNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;
Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(typeNameclass="token punctuation">)class="token punctuation">;

3.实例化Class对象

class="prism language-java">class="token function">forNameclass="token punctuation">(class="token string">"com.lydms.utils.Test"class="token punctuation">)
class="prism language-java">class="token keyword">package comclass="token punctuation">.lydmsclass="token punctuation">.utilsclass="token punctuation">;
class="token keyword">public class="token keyword">class class="token class-name">Test class="token punctuation">{
    class="token keyword">public class="token keyword">static class="token keyword">void class="token function">mainclass="token punctuation">(Stringclass="token punctuation">[class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws ClassNotFoundException class="token punctuation">{
class="token comment">//      实例化Class对象(com.lydms.utils.Test)
        Classclass="token operator"><class="token operator">?class="token operator">> aClass1 class="token operator">= Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(class="token string">"com.lydms.utils.Test"class="token punctuation">)class="token punctuation">;
        Classclass="token operator"><class="token operator">? class="token keyword">extends class="token class-name">Testclass="token operator">> aClass2 class="token operator">= class="token keyword">new class="token class-name">Testclass="token punctuation">(class="token punctuation">)class="token punctuation">.class="token function">getClassclass="token punctuation">(class="token punctuation">)class="token punctuation">;
        Classclass="token generics function">class="token punctuation"><Testclass="token punctuation">> aClass3 class="token operator">= Testclass="token punctuation">.class="token keyword">classclass="token punctuation">;
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(aClass1class="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(aClass2class="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(aClass3class="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}

4、获取一个对象的父接口和实现的接口

class="prism language-java">class="token function">getSuperclassclass="token punctuation">(class="token punctuation">)class="token punctuation">;	class="token comment">//父接口
class="token function">getInterfacesclass="token punctuation">(class="token punctuation">)class="token punctuation">;	class="token comment">//接口实现类
class="prism language-java">class="token keyword">package comclass="token punctuation">.lydmsclass="token punctuation">.utilsclass="token punctuation">;
class="token keyword">import javaclass="token punctuation">.ioclass="token punctuation">.Serializableclass="token punctuation">;

class="token keyword">public class="token keyword">class class="token class-name">Test class="token keyword">implements class="token class-name">Serializable class="token punctuation">{
    class="token keyword">public class="token keyword">static class="token keyword">void class="token function">mainclass="token punctuation">(Stringclass="token punctuation">[class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws ClassNotFoundException class="token punctuation">{

class="token comment">//        4、获取一个对象的父接口和实现的接口
        Classclass="token operator"><class="token operator">?class="token operator">> aClass class="token operator">= Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(class="token string">"com.lydms.utils.Test"class="token punctuation">)class="token punctuation">;
        Classclass="token operator"><class="token operator">?class="token operator">> superclass class="token operator">= aClassclass="token punctuation">.class="token function">getSuperclassclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token comment">//        获取到的父类
        String parentName class="token operator">= superclassclass="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"父类名为:" class="token operator">+ parentNameclass="token punctuation">)class="token punctuation">;
class="token comment">//        获得所有的接口实现类
        Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] interfaces class="token operator">= aClassclass="token punctuation">.class="token function">getInterfacesclass="token punctuation">(class="token punctuation">)class="token punctuation">;
        class="token keyword">for class="token punctuation">(class="token keyword">int i class="token operator">= class="token number">0class="token punctuation">; i class="token operator">< interfacesclass="token punctuation">.lengthclass="token punctuation">; iclass="token operator">++class="token punctuation">) class="token punctuation">{
            Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"实现的接口为:" class="token operator">+ interfacesclass="token punctuation">[iclass="token punctuation">]class="token punctuation">)class="token punctuation">;
        class="token punctuation">}
    class="token punctuation">}
class="token punctuation">}

5、反射机制实例化一个类的对象

class="prism language-java">class="token function">newInstanceclass="token punctuation">(class="token punctuation">)class="token punctuation">;			
class="token function">getConstructorsclass="token punctuation">(class="token punctuation">)class="token punctuation">;		
class="token function">getParameterTypesclass="token punctuation">(class="token punctuation">)class="token punctuation">;	

方法一:

class="prism language-java">class="token comment">//  1、强转为指定格式对象
Classclass="token operator"><class="token operator">?class="token operator">> aClass class="token operator">= Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(class="token string">"com.lydms.utils.User"class="token punctuation">)class="token punctuation">;
User user class="token operator">= class="token punctuation">(Userclass="token punctuation">) aClassclass="token punctuation">.class="token function">newInstanceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
userclass="token punctuation">.class="token function">setNameclass="token punctuation">(class="token string">"张三"class="token punctuation">)class="token punctuation">;
userclass="token punctuation">.class="token function">setAgeclass="token punctuation">(class="token number">11class="token punctuation">)class="token punctuation">;
Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(userclass="token punctuation">.class="token function">toStringclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;

方法二:

class="prism language-java">class="token comment">//  2、方式二(先获取方法对象,在取参数)
Constructorclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] constructors class="token operator">= aClassclass="token punctuation">.class="token function">getConstructorsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token keyword">for class="token punctuation">(class="token keyword">int i class="token operator">= class="token number">0class="token punctuation">; i class="token operator">< constructorsclass="token punctuation">.lengthclass="token punctuation">; iclass="token operator">++class="token punctuation">) class="token punctuation">{
    Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] parameterTypes class="token operator">= constructorsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getParameterTypesclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token keyword">for class="token punctuation">(class="token keyword">int i1 class="token operator">= class="token number">0class="token punctuation">; i1 class="token operator">< parameterTypesclass="token punctuation">.lengthclass="token punctuation">; i1class="token operator">++class="token punctuation">) class="token punctuation">{
        String name class="token operator">= parameterTypesclass="token punctuation">[i1class="token punctuation">]class="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"name"class="token operator">+nameclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}

实体类

class="prism language-java">class="token keyword">package comclass="token punctuation">.lydmsclass="token punctuation">.utilsclass="token punctuation">;

class="token keyword">public class="token keyword">class class="token class-name">User class="token punctuation">{
    class="token keyword">private String nameclass="token punctuation">;
    class="token keyword">private class="token keyword">int ageclass="token punctuation">;

    class="token keyword">public class="token function">Userclass="token punctuation">(String nameclass="token punctuation">, class="token keyword">int ageclass="token punctuation">) class="token punctuation">{
        class="token keyword">thisclass="token punctuation">.name class="token operator">= nameclass="token punctuation">;
        class="token keyword">thisclass="token punctuation">.age class="token operator">= ageclass="token punctuation">;
    class="token punctuation">}

    class="token keyword">public class="token function">Userclass="token punctuation">(class="token punctuation">) class="token punctuation">{
    class="token punctuation">}

    class="token keyword">public String class="token function">getNameclass="token punctuation">(class="token punctuation">) class="token punctuation">{
        class="token keyword">return nameclass="token punctuation">;
    class="token punctuation">}

    class="token keyword">public class="token keyword">void class="token function">setNameclass="token punctuation">(String nameclass="token punctuation">) class="token punctuation">{
        class="token keyword">thisclass="token punctuation">.name class="token operator">= nameclass="token punctuation">;
    class="token punctuation">}

    class="token keyword">public class="token keyword">int class="token function">getAgeclass="token punctuation">(class="token punctuation">) class="token punctuation">{
        class="token keyword">return ageclass="token punctuation">;
    class="token punctuation">}

    class="token keyword">public class="token keyword">void class="token function">setAgeclass="token punctuation">(class="token keyword">int ageclass="token punctuation">) class="token punctuation">{
        class="token keyword">thisclass="token punctuation">.age class="token operator">= ageclass="token punctuation">;
    class="token punctuation">}

    class="token annotation punctuation">@Override
    class="token keyword">public String class="token function">toStringclass="token punctuation">(class="token punctuation">) class="token punctuation">{
        class="token keyword">return class="token string">"User{" class="token operator">+
                class="token string">"name='" class="token operator">+ name class="token operator">+ class="token string">'\'' class="token operator">+
                class="token string">", age=" class="token operator">+ age class="token operator">+
                class="token string">'}'class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}

6、获取某个类的全部属性

class="prism language-java">aClassclass="token punctuation">.class="token function">getDeclaredFieldsclass="token punctuation">(class="token punctuation">)class="token punctuation">;		class="token comment">//获取本类的全部属性(数组)
aClass1class="token punctuation">.class="token function">getFieldsclass="token punctuation">(class="token punctuation">)class="token punctuation">;			class="token comment">//获取实现的接口或父类的属性
fieldsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getModifiersclass="token punctuation">(class="token punctuation">)		class="token comment">//数字型权限修饰符
Modifierclass="token punctuation">.class="token function">toStringclass="token punctuation">(modifiersclass="token punctuation">)class="token punctuation">;	class="token comment">//将返回的数字型修饰符,转为string类型。(private static final)

获取本类的全部属性(数组)

class="prism language-java">class="token keyword">import javaclass="token punctuation">.langclass="token punctuation">.reflectclass="token punctuation">.Fieldclass="token punctuation">;
class="token keyword">import javaclass="token punctuation">.langclass="token punctuation">.reflectclass="token punctuation">.Modifierclass="token punctuation">;
class="token keyword">public class="token keyword">class class="token class-name">Testclass="token punctuation">{

    class="token keyword">private class="token keyword">static class="token keyword">final class="token keyword">long seriaVersionUID class="token operator">= class="token number">342342342class="token punctuation">;

    class="token keyword">public class="token keyword">static class="token keyword">void class="token function">mainclass="token punctuation">(Stringclass="token punctuation">[class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
        Classclass="token operator"><class="token operator">?class="token operator">> aClass class="token operator">= Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(class="token string">"com.lydms.utils.Test"class="token punctuation">)class="token punctuation">;

class="token comment">//        获取本类的全部属性(循环获取)
        Fieldclass="token punctuation">[class="token punctuation">] fields class="token operator">= aClassclass="token punctuation">.class="token function">getDeclaredFieldsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
        class="token keyword">for class="token punctuation">(class="token keyword">int i class="token operator">= class="token number">0class="token punctuation">; i class="token operator">< fieldsclass="token punctuation">.lengthclass="token punctuation">; iclass="token operator">++class="token punctuation">) class="token punctuation">{
class="token comment">//            权限修饰符(private static final)
            class="token keyword">int modifiers class="token operator">= fieldsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getModifiersclass="token punctuation">(class="token punctuation">)class="token punctuation">;
            String str class="token operator">= Modifierclass="token punctuation">.class="token function">toStringclass="token punctuation">(modifiersclass="token punctuation">)class="token punctuation">;
            Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(strclass="token punctuation">)class="token punctuation">;

class="token comment">//            属性类型(long)
            Classclass="token operator"><class="token operator">?class="token operator">> type class="token operator">= fieldsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getTypeclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token comment">//            private static final + long + seriaVersionUID;
            Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(str class="token operator">+ class="token string">"+" class="token operator">+ typeclass="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">) class="token operator">+ class="token string">"+" class="token operator">+ fieldsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">) class="token operator">+ class="token string">";"class="token punctuation">)class="token punctuation">;
        class="token punctuation">}
    class="token punctuation">}

获取实现的接口或父类的属性

class="prism language-java">class="token keyword">public class="token keyword">interface class="token class-name">interfaceTest class="token punctuation">{
    class="token keyword">static class="token keyword">final class="token keyword">long interfaceTestclass="token operator">= class="token number">111111class="token punctuation">;
class="token punctuation">}
class="prism language-java">class="token keyword">import javaclass="token punctuation">.langclass="token punctuation">.reflectclass="token punctuation">.Fieldclass="token punctuation">;
class="token keyword">import javaclass="token punctuation">.langclass="token punctuation">.reflectclass="token punctuation">.Modifierclass="token punctuation">;
class="token keyword">public class="token keyword">class class="token class-name">Test class="token keyword">implements class="token class-name">interfaceTest class="token punctuation">{
    class="token keyword">public class="token keyword">static class="token keyword">void class="token function">mainclass="token punctuation">(Stringclass="token punctuation">[class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
        Classclass="token operator"><class="token operator">?class="token operator">> aClass class="token operator">= Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(class="token string">"com.lydms.utils.Test"class="token punctuation">)class="token punctuation">;
        Fieldclass="token punctuation">[class="token punctuation">] fields1 class="token operator">= aClassclass="token punctuation">.class="token function">getFieldsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
        class="token keyword">for class="token punctuation">(class="token keyword">int i class="token operator">= class="token number">0class="token punctuation">; i class="token operator">< fields1class="token punctuation">.lengthclass="token punctuation">; iclass="token operator">++class="token punctuation">) class="token punctuation">{
            class="token keyword">int mo class="token operator">= fields1class="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getModifiersclass="token punctuation">(class="token punctuation">)class="token punctuation">;
            String str class="token operator">= Modifierclass="token punctuation">.class="token function">toStringclass="token punctuation">(moclass="token punctuation">)class="token punctuation">;
          
class="token comment">//            权限修饰符(private static final)
            Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(strclass="token punctuation">)class="token punctuation">;
          
class="token comment">//            属性类型(long)
            Classclass="token operator"><class="token operator">?class="token operator">> type class="token operator">= fields1class="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getTypeclass="token punctuation">(class="token punctuation">)class="token punctuation">;
            Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(typeclass="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;
          
class="token comment">//            方法的名称(interfaceTest)
            Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(fields1class="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;
        class="token punctuation">}
    class="token punctuation">}
class="token punctuation">}

7、获取某个类的全部属性(修饰符,入参,返回值)

class="prism language-java">aClassclass="token punctuation">.class="token function">getMethodsclass="token punctuation">(class="token punctuation">)class="token punctuation">;		class="token comment">//获取类中所有方法
methodsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)			class="token comment">//方法名
methodsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getModifiersclass="token punctuation">(class="token punctuation">)class="token punctuation">;		class="token comment">//修饰符
methodsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getReturnTypeclass="token punctuation">(class="token punctuation">)class="token punctuation">.class="token function">getTypeNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;	class="token comment">//返回值类型
methodsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getParameterTypesclass="token punctuation">(class="token punctuation">)class="token punctuation">;		class="token comment">//获取入参的对象
methodsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getExceptionTypesclass="token punctuation">(class="token punctuation">)		class="token comment">//抛出的异常

待获取方法

class="prism language-java">class="token keyword">package comclass="token punctuation">.lydmsclass="token punctuation">.classesclass="token punctuation">;
class="token keyword">import javaclass="token punctuation">.ioclass="token punctuation">.IOExceptionclass="token punctuation">;
class="token keyword">import javaclass="token punctuation">.langclass="token punctuation">.reflectclass="token punctuation">.Methodclass="token punctuation">;
class="token keyword">import javaclass="token punctuation">.langclass="token punctuation">.reflectclass="token punctuation">.Modifierclass="token punctuation">;

class="token keyword">public class="token keyword">class class="token class-name">TestClass class="token punctuation">{
    class="token keyword">public String class="token function">getClassclass="token punctuation">(String inclass="token punctuation">) class="token keyword">throws IOException class="token punctuation">{
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"获取所有的方法"class="token punctuation">)class="token punctuation">;
        class="token keyword">return nullclass="token punctuation">;
    class="token punctuation">}
class="token punctuation">}

获取TestClass中全部属性

class="prism language-java">class="token keyword">public class="token keyword">static class="token keyword">void class="token function">mainclass="token punctuation">(Stringclass="token punctuation">[class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
    Classclass="token operator"><class="token operator">?class="token operator">> aClass class="token operator">= Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(class="token string">"com.lydms.classes.TestClass"class="token punctuation">)class="token punctuation">;
    Methodclass="token punctuation">[class="token punctuation">] methods class="token operator">= aClassclass="token punctuation">.class="token function">getMethodsclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token keyword">for class="token punctuation">(class="token keyword">int i class="token operator">= class="token number">0class="token punctuation">; i class="token operator">< methodsclass="token punctuation">.lengthclass="token punctuation">; iclass="token operator">++class="token punctuation">) class="token punctuation">{
          class="token number">1.方法名class="token punctuation">(getClassclass="token punctuation">)
        String name class="token operator">= methodsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;
          class="token number">2.修饰符class="token punctuation">(class="token keyword">publicclass="token punctuation">)
        class="token keyword">int modifiers class="token operator">= methodsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getModifiersclass="token punctuation">(class="token punctuation">)class="token punctuation">;
        String modifierName class="token operator">= Modifierclass="token punctuation">.class="token function">toStringclass="token punctuation">(modifiersclass="token punctuation">)class="token punctuation">;
          class="token number">3.返回值类型class="token punctuation">(javaclass="token punctuation">.langclass="token punctuation">.Stringclass="token punctuation">)
        String name1 class="token operator">= methodsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getReturnTypeclass="token punctuation">(class="token punctuation">)class="token punctuation">.class="token function">getNameclass="token punctuation">(class="token punctuation">)class="token punctuation">;
          class="token number">4.入参的对象class="token punctuation">(class="token keyword">class class="token class-name">javaclass="token punctuation">.langclass="token punctuation">.Stringclass="token punctuation">)
        Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] parameterTypes class="token operator">= methodsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getParameterTypesclass="token punctuation">(class="token punctuation">)class="token punctuation">;
          class="token number">5. 抛出的异常class="token punctuation">( class="token keyword">class class="token class-name">javaclass="token punctuation">.ioclass="token punctuation">.IOExceptionclass="token punctuation">)
        Classclass="token operator"><class="token operator">?class="token operator">>class="token punctuation">[class="token punctuation">] exceptionTypes class="token operator">= methodsclass="token punctuation">[iclass="token punctuation">]class="token punctuation">.class="token function">getExceptionTypesclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}

8、通过反射机制调用某个类的方法

class="prism language-java">aClassclass="token punctuation">.class="token function">newInstanceclass="token punctuation">(class="token punctuation">)					class="token comment">//闯将TestRun类的对象
test01class="token punctuation">.class="token function">invokeclass="token punctuation">(aClassclass="token punctuation">.class="token function">newInstanceclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;	class="token comment">//执行test01方法

待获取方法

class="prism language-java">class="token keyword">public class="token keyword">class class="token class-name">TestRun class="token punctuation">{
    class="token keyword">public class="token keyword">void class="token function">test01class="token punctuation">(class="token punctuation">)class="token punctuation">{
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"执行Test01方法"class="token punctuation">)class="token punctuation">;
    class="token punctuation">}
    class="token keyword">public class="token keyword">void class="token function">test02class="token punctuation">(class="token keyword">int ageclass="token punctuation">,String nameclass="token punctuation">)class="token punctuation">{
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"执行Test02方法,其中年龄:"class="token operator">+ageclass="token operator">+class="token string">",姓名:"class="token operator">+nameclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}

执行里面方法

class="prism language-java">class="token keyword">public class="token keyword">static class="token keyword">void class="token function">mainclass="token punctuation">(Stringclass="token punctuation">[class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exceptionclass="token punctuation">{
    Classclass="token operator"><class="token operator">?class="token operator">> aClass class="token operator">= Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(class="token string">"com.lydms.classes.TestRun"class="token punctuation">)class="token punctuation">;
    class="token comment">// 1、调用TestRun类中的test01()方法
    Method test01 class="token operator">= aClassclass="token punctuation">.class="token function">getMethodclass="token punctuation">(class="token string">"test01"class="token punctuation">)class="token punctuation">;
    test01class="token punctuation">.class="token function">invokeclass="token punctuation">(aClassclass="token punctuation">.class="token function">newInstanceclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;
    class="token comment">// 2、调用TestRun类中的test02()方法
    Method test02 class="token operator">= aClassclass="token punctuation">.class="token function">getMethodclass="token punctuation">(class="token string">"test02"class="token punctuation">, class="token keyword">intclass="token punctuation">.class="token keyword">classclass="token punctuation">, Stringclass="token punctuation">.class="token keyword">classclass="token punctuation">)class="token punctuation">;
    class="token comment">//  test02的执行,需要TestRun的对象,和2个入参
    test02class="token punctuation">.class="token function">invokeclass="token punctuation">(aClassclass="token punctuation">.class="token function">newInstanceclass="token punctuation">(class="token punctuation">)class="token punctuation">,class="token number">10class="token punctuation">,class="token string">"李四"class="token punctuation">)class="token punctuation">;
class="token punctuation">}

9、更改类中属性

class="prism language-java">aClassclass="token punctuation">.class="token function">getDeclaredFieldclass="token punctuation">(class="token string">"pro"class="token punctuation">)class="token punctuation">;		class="token comment">//获取里面参数pro的对象
proclass="token punctuation">.class="token function">setclass="token punctuation">(testObjectclass="token punctuation">, class="token string">"新的参数"class="token punctuation">)class="token punctuation">;	class="token comment">//设置pro参数的值
proclass="token punctuation">.class="token function">getclass="token punctuation">(testObjectclass="token punctuation">)				class="token comment">//获取pro参数的值(TestFiled类对象)

待获取方法

class="prism language-java">class="token keyword">public class="token keyword">class class="token class-name">TestFiled class="token punctuation">{
    class="token keyword">private String pro class="token operator">= nullclass="token punctuation">;
class="token punctuation">}

执行里面方法

class="prism language-java">class="token keyword">public class="token keyword">static class="token keyword">void class="token function">mainclass="token punctuation">(Stringclass="token punctuation">[class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
    Classclass="token operator"><class="token operator">?class="token operator">> aClass class="token operator">= Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(class="token string">"com.lydms.classes.TestFiled"class="token punctuation">)class="token punctuation">;
    Field pro class="token operator">= aClassclass="token punctuation">.class="token function">getDeclaredFieldclass="token punctuation">(class="token string">"pro"class="token punctuation">)class="token punctuation">;
    class="token comment">//  true 则指示反射的对象在使用时,应该取消Java 语言访问检查
    proclass="token punctuation">.class="token function">setAccessibleclass="token punctuation">(class="token boolean">trueclass="token punctuation">)class="token punctuation">;
    Object testObject class="token operator">= aClassclass="token punctuation">.class="token function">newInstanceclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    proclass="token punctuation">.class="token function">setclass="token punctuation">(testObjectclass="token punctuation">, class="token string">"新的参数"class="token punctuation">)class="token punctuation">;
    class="token operator">/  打印更改后的参数值
    Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(proclass="token punctuation">.class="token function">getclass="token punctuation">(testObjectclass="token punctuation">)class="token punctuation">)class="token punctuation">;
class="token punctuation">}

10、执行配置文件中指定的类中方法

配置文件application.properties

class="prism language-java">classNameclass="token operator">=comclass="token punctuation">.lydmsclass="token punctuation">.utilsclass="token punctuation">.TestClass
methodNameclass="token operator">=test

测试执行的方式:

class="prism language-java">class="token keyword">package comclass="token punctuation">.lydmsclass="token punctuation">.utilsclass="token punctuation">;

class="token keyword">public class="token keyword">class class="token class-name">TestClass class="token punctuation">{
    
    class="token keyword">public class="token keyword">void class="token function">testclass="token punctuation">(class="token punctuation">)class="token punctuation">{
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(class="token string">"通过反射执行test中方法"class="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}

反射使用代码:

class="prism language-java">class="token keyword">import javaclass="token punctuation">.ioclass="token punctuation">.FileInputStreamclass="token punctuation">;
class="token keyword">import javaclass="token punctuation">.ioclass="token punctuation">.InputStreamclass="token punctuation">;
class="token keyword">import javaclass="token punctuation">.langclass="token punctuation">.reflectclass="token punctuation">.Methodclass="token punctuation">;
class="token keyword">import javaclass="token punctuation">.utilclass="token punctuation">.Propertiesclass="token punctuation">;

class="token keyword">public class="token keyword">class class="token class-name">GoToClass class="token punctuation">{
    class="token keyword">public class="token keyword">static class="token keyword">void class="token function">mainclass="token punctuation">(Stringclass="token punctuation">[class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
class="token comment">//        1.1 创建Properties对象
        Properties pro class="token operator">= class="token keyword">new class="token class-name">Propertiesclass="token punctuation">(class="token punctuation">)class="token punctuation">;

class="token comment">//        1.2 加载配置文件,转换为一个集合
        InputStream is class="token operator">= class="token keyword">new class="token class-name">FileInputStreamclass="token punctuation">(class="token string">"E:\Code\test\src\main\java\com\lydms\utils\TestClass.java"class="token punctuation">)class="token punctuation">;
class="token comment">//        加载配置信息
        proclass="token punctuation">.class="token function">loadclass="token punctuation">(isclass="token punctuation">)class="token punctuation">;

class="token comment">//        2. 获取配置文件中定义的数据
        String className class="token operator">= proclass="token punctuation">.class="token function">getPropertyclass="token punctuation">(class="token string">"className"class="token punctuation">)class="token punctuation">;
        String methodName class="token operator">= proclass="token punctuation">.class="token function">getPropertyclass="token punctuation">(class="token string">"methodName"class="token punctuation">)class="token punctuation">;

class="token comment">//        3. 加载该类进内存
        Class class="token class-name">cls class="token operator">= Classclass="token punctuation">.class="token function">forNameclass="token punctuation">(classNameclass="token punctuation">)class="token punctuation">;

class="token comment">//        4. 创建对象
        Object obj class="token operator">= clsclass="token punctuation">.class="token function">newInstanceclass="token punctuation">(class="token punctuation">)class="token punctuation">;

class="token comment">//        5. 获取方法对象
        Method method class="token operator">= clsclass="token punctuation">.class="token function">getMethodclass="token punctuation">(methodNameclass="token punctuation">)class="token punctuation">;

class="token comment">//        6. 执行方法
        methodclass="token punctuation">.class="token function">invokeclass="token punctuation">(objclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}

执行结果:
在这里插入图片描述

11、通过反射机制往List中添加任意类型的元素

注意:这只是演示反射机制,在正常的开发中不能这样使用(忽略了创建对象时,指定的类型)

class="prism language-java">class="token keyword">import javaclass="token punctuation">.langclass="token punctuation">.reflectclass="token punctuation">.Methodclass="token punctuation">;
class="token keyword">import javaclass="token punctuation">.utilclass="token punctuation">.ArrayListclass="token punctuation">;
class="token keyword">import javaclass="token punctuation">.utilclass="token punctuation">.Dateclass="token punctuation">;
class="token keyword">import javaclass="token punctuation">.utilclass="token punctuation">.Listclass="token punctuation">;

class="token keyword">public class="token keyword">class class="token class-name">ReflectDemo3 class="token punctuation">{
    class="token keyword">public class="token keyword">static class="token keyword">void class="token function">mainclass="token punctuation">(Stringclass="token punctuation">[class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
        Listclass="token generics function">class="token punctuation"><Integerclass="token punctuation">> list class="token operator">= class="token keyword">new class="token class-name">ArrayListclass="token generics function">class="token punctuation"><Integerclass="token punctuation">>class="token punctuation">(class="token punctuation">)class="token punctuation">;
        listclass="token punctuation">.class="token function">addclass="token punctuation">(class="token number">11class="token punctuation">)class="token punctuation">;

        class="token comment">//获取类
        Classclass="token operator"><class="token operator">?class="token operator">> class1 class="token operator">= listclass="token punctuation">.class="token function">getClassclass="token punctuation">(class="token punctuation">)class="token punctuation">;

        class="token comment">//获取方法
        Method addMethod class="token operator">= class1class="token punctuation">.class="token function">getMethodclass="token punctuation">(class="token string">"add"class="token punctuation">, Objectclass="token punctuation">.class="token keyword">classclass="token punctuation">)class="token punctuation">;

        class="token comment">//执行,添加任意类型对象
        addMethodclass="token punctuation">.class="token function">invokeclass="token punctuation">(listclass="token punctuation">, class="token string">"asfdgh"class="token punctuation">)class="token punctuation">;
        addMethodclass="token punctuation">.class="token function">invokeclass="token punctuation">(listclass="token punctuation">, class="token boolean">trueclass="token punctuation">)class="token punctuation">;
        addMethodclass="token punctuation">.class="token function">invokeclass="token punctuation">(listclass="token punctuation">, class="token keyword">new class="token class-name">Dateclass="token punctuation">(class="token punctuation">)class="token punctuation">)class="token punctuation">;
        Systemclass="token punctuation">.outclass="token punctuation">.class="token function">printlnclass="token punctuation">(listclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}

12、更改方法上注解值

代码(更改board方法中@RequestMapping注解的值)

class="prism language-java">class="token annotation punctuation">@RestController
class="token annotation punctuation">@RequestMappingclass="token punctuation">(class="token string">"/test"class="token punctuation">)
class="token keyword">public class="token keyword">class class="token class-name">BoardController class="token punctuation">{
   
   class="token annotation punctuation">@RequestMappingclass="token punctuation">(value class="token operator">= class="token string">"/board"class="token punctuation">, method class="token operator">= class="token punctuation">{RequestMethodclass="token punctuation">.POSTclass="token punctuation">}class="token punctuation">)
   class="token keyword">public ApiResult class="token function">boardclass="token punctuation">(class="token annotation punctuation">@RequestBody Mapclass="token generics function">class="token punctuation"><Stringclass="token punctuation">, Objectclass="token punctuation">> paramsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{

       class="token keyword">return ApiResultclass="token punctuation">.class="token function">succclass="token punctuation">(nullclass="token punctuation">)class="token punctuation">;
   class="token punctuation">}
class="token punctuation">}

获取方式

class="prism language-java">class="token comment">//  获取成员方法的class对象
Method board class="token operator">= BoardControllerclass="token punctuation">.class="token keyword">classclass="token punctuation">.class="token function">getMethodclass="token punctuation">(class="token string">"board"class="token punctuation">, Mapclass="token punctuation">.class="token keyword">classclass="token punctuation">)class="token punctuation">;
class="token comment">// 获取 Test 上的注解
RequestMapping requestMapping class="token operator">= boardclass="token punctuation">.class="token function">getAnnotationclass="token punctuation">(RequestMappingclass="token punctuation">.class="token keyword">classclass="token punctuation">)class="token punctuation">;
class="token comment">// 获取代理处理器
InvocationHandler handler class="token operator">= Proxyclass="token punctuation">.class="token function">getInvocationHandlerclass="token punctuation">(requestMappingclass="token punctuation">)class="token punctuation">;
class="token comment">// 过去私有 memberValues 属性
Field f class="token operator">= handlerclass="token punctuation">.class="token function">getClassclass="token punctuation">(class="token punctuation">)class="token punctuation">.class="token function">getDeclaredFieldclass="token punctuation">(class="token string">"memberValues"class="token punctuation">)class="token punctuation">;
fclass="token punctuation">.class="token function">setAccessibleclass="token punctuation">(class="token boolean">trueclass="token punctuation">)class="token punctuation">;
class="token comment">// 获取实例的属性map
Mapclass="token generics function">class="token punctuation"><Stringclass="token punctuation">, Objectclass="token punctuation">> memberValues class="token operator">= class="token punctuation">(Mapclass="token generics function">class="token punctuation"><Stringclass="token punctuation">, Objectclass="token punctuation">>class="token punctuation">) fclass="token punctuation">.class="token function">getclass="token punctuation">(handlerclass="token punctuation">)class="token punctuation">;
class="token comment">// 修改属性值
memberValuesclass="token punctuation">.class="token function">putclass="token punctuation">(class="token string">"value"class="token punctuation">, class="token string">"/url"class="token punctuation">)class="token punctuation">;

五、Xmind整理

在这里插入图片描述
CSDN地址:

CSDN地址

百度网盘地址:

链接:https://pan.baidu.com/s/1_RKxpkZehV0wSFASdv-LXQ 
提取码:czz3

http://www.niftyadmin.cn/n/1634709.html

相关文章

2019——2020 第一学期 计算机组织与结构考题(软工班)(回忆)

介绍 回忆版整理了好久&#xff0c;最近才想起来传一下造福学弟学妹。 总体来说个人感觉比较难&#xff0c;常规题有&#xff0c;出人意料也有&#xff08;可能是我没准备好&#xff09; 时间上&#xff0c;比较紧张&#xff0c;像计算1 2 3 简答1 2 3 4 这样的要是不能提笔就写…

[转]一个号码可以让你取消手机的任何服务项目

有一个号码可以让你取消手机的任何服务项目其实早就有那么一个短信内容让你可以取消你订购的服务或者强加给你的服务&#xff0c;内容就是“0000”四个零。   那发送给谁呢&#xff1f;   这个问题问的太专业了&#xff0c;发送给谁呢&#xff0c;其实发送的号码就是你订购…

AVL树探秘

本文首发于我的公众号 Linux云计算网络&#xff08;id: cloud_dev&#xff09; &#xff0c;专注于干货分享&#xff0c;号内有 10T 书籍和视频资源&#xff0c;后台回复 「1024」 即可领取&#xff0c;欢迎大家关注&#xff0c;二维码文末可以扫。 一、AVL树 AVL树是一种平衡查…

base关键字的说明(学习使用)

从本例中大家可以看出继承和重载的使用&#xff0c;各人感觉简明易懂。在第二个例子中大家可以看出如何指定在创建派生类实例时调用的基类构造函数。base 关键字用于从派生类中访问基类的成员&#xff1a; 调用基类上已被其他方法重写的方法。 指定创建派生类实例时应调用的基…

静态代理和动态代理区别(是否有实现类)

文章目录一、简介1、代理分类:2、代码区别&#xff1a;二、静态代理1、接口定义要做的事情2、具体用户实现类3、代理类(业务增强类)4、测试类三、动态代理1、JDK动态代理类1.1、有接口有委托类的情况1.2、仅有接口的情况2、CGLIB动态代理三、总结一、简介 Proxy代理模式是一种…

【数据库】MySQL的安装与简单使用

首先我们要下载Mysql的安装包&#xff0c;大家可以到http://mysql.com官网中根据自己的电脑系统版本下载也可以点击 MySQL资源 下载 密码&#xff1a;btuu建议下载5.7以上的版本&#xff0c;因为省掉了许多麻烦&#xff0c;如果你是5.6及以下版本也没关系&#xff0c;可以看下面…

ASP.NET程序中常用编程代码(二) --转

来源&#xff1a;http://www.dnnstudy.com/Default.aspx?tabid53&forumid6&threadid37&scopeposts 1、绑定在DataList中的DropDownList private void dlistOrder_EditCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e){ //绑定订单状…

PTA甲级-1001(A+B Format)

题意 Calculate ab and output the sum in standard format – that is, the digits must be separated into groups of three by commas (unless there are less than four digits). Input Specification: Each input file contains one test case. Each case contains a p…