码迷,mamicode.com
首页 > 其他好文 > 详细

反射总结

时间:2018-03-30 20:02:29      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:gpo   函数   logs   tde   div   ble   integer   pre   block   

得到class的三种方式

  • Class.forName("cn.bean.A");
  • A.class;
  • Thread.currentThread().getContextClassLoader().loadClass("cn.bean.A");

getFields()与getDeclaredFields()区别

getFields()只能访问类中声明为公有的字段,私有的字段它无法访问,能访问从其它类继承来的公有方法.

getDeclaredFields()能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法

getMethods()与getDeclaredMethods()区别

getMethods()只能访问类中声明为公有的方法,私有的方法它无法访问,能访问从其它类继承来的公有方法

getDeclaredFields()能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法

getConstructors()与getDeclaredConstructors()区别

getConstructors()只能访问类中声明为public的构造函数

getDeclaredConstructors()能访问类中所有的构造函数,与public,private,protect无关

实例化

        Class clazz = Class.forName("Demo");
        //通过带参数构造实例化
        Demo demo = (Demo) clazz.getConstructor(String.class, Integer.class).newInstance("hello", 12);
        clazz.getConstructor(new Class[]{String.class,Integer.class}).newInstance(new Object[]{"hello",12});
        //默认空构造实例化
        Demo demo1 = (Demo) clazz.newInstance();
        System.out.println(demo.getName());
        System.out.println(demo.getAge());

操作属性

        Class clazz = Class.forName("Demo");
        Demo demo = (Demo) clazz.newInstance();
        Field name = clazz.getDeclaredField("name");
        //允许访问私有变量
        name.setAccessible(true);
        name.set(demo , "hello world");
        Object obj = name.get(demo);
        System.out.println(obj);

操作方法

        Class clazz = Class.forName("Demo");
        Demo demo = (Demo) clazz.newInstance();

        Method getName = clazz.getDeclaredMethod("getName");
        Method setName = clazz.getDeclaredMethod("setName", String.class);

        //val是method的返回值
        Object val = setName.invoke(demo , "hello");
        System.out.println(demo.getName());
        System.out.println(val);

反射总结

标签:gpo   函数   logs   tde   div   ble   integer   pre   block   

原文地址:https://www.cnblogs.com/DivineHost/p/8678008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!