首页 > 编程语言 > 详细

Java反射常用示例

时间:2019-05-07 20:43:09      阅读:117      评论:0      收藏:0      [点我收藏+]

 

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 + ";\t 获取类名,不含包名:" + 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 + "\tfield.getName:" + field.getName() + "\tfield.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

 

Java反射常用示例

原文:https://www.cnblogs.com/hahajava/p/10827829.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!