反射总结

Posted divinehost

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射总结相关的知识,希望对你有一定的参考价值。

得到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);









以上是关于反射总结的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL片段着色器不照亮场景

将 OpenGL 片段着色器设置为仅通过漫反射减少 vec4 色点的 RGB 值,而不是 alpha

反射机制

python常用代码片段总结

反射机制入门

反射机制入门