• Java反射常用示例


    Test1 test1 = new Test1();
            test1.setProp1("Hello");
            test1.setProp2(100);
    
            Class clazz = Test1.class;//获取Class对象方式1
    //        Class clazz2 = Class.forName("com.jdyh.worker.project.base.utils.date.dd.Test1");//获取Class对象方式2
    
            String clazzName = clazz.getName();//获取类名,含包名
            String clazzSimpleName = clazz.getSimpleName();//获取类名,不含包名
            System.out.println("--1-->" + "获取类名,含包名:" + clazzName + ";	 获取类名,不含包名:" + clazzSimpleName);
    
            int mod = clazz.getModifiers();//获取类修饰符
            System.out.println("--2-->" + "判断类修饰符.isPublic?:" + Modifier.isPublic(mod));//判断类修饰符
            System.out.println("--3-->" + "判断类修饰符.isProtected?:" + Modifier.isProtected(mod));//判断类修饰符
    
            Package p = clazz.getPackage();//获取包
            System.out.println("--4-->" + "获取包:" + p);
    
            Class superClass = clazz.getSuperclass();//获取父类
            System.out.println("--5-->" + "获取父类:" + superClass);
    
            Class[] interfaces = clazz.getInterfaces();//获取实现接口
            System.out.println("--6-->" + "获取实现接口:" + interfaces.length);
    
            Constructor[] cons = clazz.getConstructors();//构造方法
            System.out.println("--7-->" + "构造方法:" + cons.length);
    
    
            Method[] methods = clazz.getMethods();//获取所有方法
            System.out.println("--8-->" + "获取所有方法:" + methods.length);
            for (Method method : methods) {
                System.out.println("--9-->" + "获取所有方法-遍历输出:" + method);
            }
    
            Method[] methods2 = clazz.getMethods();//获取私有方法
            System.out.println("--10-->" + "获取私有方法:" + methods2.length);
            for (Method method : methods2) {
                System.out.println("--11-->" + "获取私有方法-输出:" + method.getName());
            }
            Method method = clazz.getMethod("getProp1", null);//获取指定方法
            System.out.println("--12-->" + "获取getProp1方法:" + method);
            Object methodVlaue = method.invoke(test1, null);//调用方法
            System.out.println("--13-->" + "执行getProp1方法:" + methodVlaue);
    
            Method method3 = clazz.getMethod("setProp3", Double.class);//获取指定方法
            System.out.println("--14-->" + "getMethod(,):" + method3);
            Object methodVlaue3 = method3.invoke(test1, 2.0);//调用setter方法,该方法没有返回值,所以methodVlaue3为null;此处注意参数2.0 ,不能用null
            System.out.println("--15-->" + "method.invoke(,):" + methodVlaue3);
    
    
            Field[] fields = clazz.getDeclaredFields();//获取变量
            System.out.println("--16-->" + "getDeclaredFields:" + fields.length);
            for (Field field : fields) {
                field.setAccessible(true);
                field.set(test1, null);//设置字段的值
                System.out.println("--17-->" + "field.getAnnotations:" + field.getAnnotations().length + "	field.getName:" + field.getName() + "	field.get:" + field.get(test1));//获取实例属性名和值
    
            }
    
            Annotation[] annos = clazz.getAnnotations();//获取类注解
            System.out.println("--18-->" + "getAnnotations:" + annos.length);
    public static class Test1 {
    
            private String prop1;
            private Integer prop2;
            private Double prop3;
    
            public String getProp1() {
                return prop1;
            }
    
            public void setProp1(String prop1) {
                this.prop1 = prop1;
            }
    
            public Integer getProp2() {
                return prop2;
            }
    
            public void setProp2(Integer prop2) {
                this.prop2 = prop2;
            }
    
            public Double getProp3() {
                return prop3;
            }
    
            public void setProp3(Double prop3) {
                this.prop3 = prop3;
            }
        }

    输出:

    --1-->获取类名,含包名:com.jdyh.worker.project.base.utils.date.dd$Test1;     获取类名,不含包名:Test1
    --2-->判断类修饰符.isPublic?:true
    --3-->判断类修饰符.isProtected?:false
    --4-->获取包:package com.jdyh.worker.project.base.utils.date
    --5-->获取父类:class java.lang.Object
    --6-->获取实现接口:0
    --7-->构造方法:1
    --8-->获取所有方法:15
    --9-->获取所有方法-遍历输出:public java.lang.String com.jdyh.worker.project.base.utils.date.dd$Test1.getProp1()
    --9-->获取所有方法-遍历输出:public void com.jdyh.worker.project.base.utils.date.dd$Test1.setProp3(java.lang.Double)
    --9-->获取所有方法-遍历输出:public java.lang.Integer com.jdyh.worker.project.base.utils.date.dd$Test1.getProp2()
    --9-->获取所有方法-遍历输出:public java.lang.Double com.jdyh.worker.project.base.utils.date.dd$Test1.getProp3()
    --9-->获取所有方法-遍历输出:public void com.jdyh.worker.project.base.utils.date.dd$Test1.setProp1(java.lang.String)
    --9-->获取所有方法-遍历输出:public void com.jdyh.worker.project.base.utils.date.dd$Test1.setProp2(java.lang.Integer)
    --9-->获取所有方法-遍历输出:public final void java.lang.Object.wait() throws java.lang.InterruptedException
    --9-->获取所有方法-遍历输出:public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
    --9-->获取所有方法-遍历输出:public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
    --9-->获取所有方法-遍历输出:public boolean java.lang.Object.equals(java.lang.Object)
    --9-->获取所有方法-遍历输出:public java.lang.String java.lang.Object.toString()
    --9-->获取所有方法-遍历输出:public native int java.lang.Object.hashCode()
    --9-->获取所有方法-遍历输出:public final native java.lang.Class java.lang.Object.getClass()
    --9-->获取所有方法-遍历输出:public final native void java.lang.Object.notify()
    --9-->获取所有方法-遍历输出:public final native void java.lang.Object.notifyAll()
    --10-->获取私有方法:15
    --11-->获取私有方法-输出:getProp1
    --11-->获取私有方法-输出:setProp3
    --11-->获取私有方法-输出:getProp2
    --11-->获取私有方法-输出:getProp3
    --11-->获取私有方法-输出:setProp1
    --11-->获取私有方法-输出:setProp2
    --11-->获取私有方法-输出:wait
    --11-->获取私有方法-输出:wait
    --11-->获取私有方法-输出:wait
    --11-->获取私有方法-输出:equals
    --11-->获取私有方法-输出:toString
    --11-->获取私有方法-输出:hashCode
    --11-->获取私有方法-输出:getClass
    --11-->获取私有方法-输出:notify
    --11-->获取私有方法-输出:notifyAll
    --12-->获取getProp1方法:public java.lang.String com.jdyh.worker.project.base.utils.date.dd$Test1.getProp1()
    --13-->执行getProp1方法:Hello
    --14-->getMethod(,):public void com.jdyh.worker.project.base.utils.date.dd$Test1.setProp3(java.lang.Double)
    --15-->method.invoke(,):null
    --16-->getDeclaredFields:3
    --17-->field.getAnnotations:0    field.getName:prop1    field.get:null
    --17-->field.getAnnotations:0    field.getName:prop2    field.get:null
    --17-->field.getAnnotations:0    field.getName:prop3    field.get:null
    --18-->getAnnotations:0

    来源: https://www.cnblogs.com/xmqa/p/8796859.html

  • 相关阅读:
    SharpReader的效率:支持meme聚合
    RSS阅读器:从订阅到发现之旅?
    关于word使用WildCards进行查找和替换
    Cannot resolve plugin org.apache.maven.plugins:mavencleanplugin:2.5
    MyBatis
    python matplotlib中axes与axis subplot的区别是什么?
    MyBatis中settings属性配置详解
    IDEA中 Project 和 Module 的区别
    Pycharm 运行程序后如何 如何查看变量的值(不通过debug的方式)
    查看oracle是否正常、表空间 (AIX)
  • 原文地址:https://www.cnblogs.com/hahajava/p/10827829.html
Copyright © 2020-2023  润新知