美文网首页
七、反射

七、反射

作者: 小鱼你好 | 来源:发表于2022-05-17 17:41 被阅读0次

一、反射机制 :

将类的各个部分 组成一个新的对象(Class 对象) 就是反射机制

二、获取反射对象

通过 对象名.getClass()
通过 类名.class 来获取
Class.forName(“完整的包名+类名”)

        Person person = new Person();
        Class pClass1 = person.getClass();
        Class pClass2 = Person.class;
        Class pClass3 = Class.forName("com.project.demo.Person");

三、 获取构造方法

public Constructor<?>[] getConstructors():获取所有的公有的构造方法
public Constructor<?>[] getDeclaredConstructors():获取所有的构造方法
public Constructor<T> getConstructor(@RecentlyNullable Class<?>... parameterTypes):获取单个共有构造方法
public Constructor<T> getDeclaredConstructor(@RecentlyNullable Class<?>... parameterTypes):获取单个私有构造方法

Class cla = Class.forName("com.project.demo.Person");
        //获取私有的单个构造方法(匹配参数)
        Constructor con = cla.getDeclaredConstructor(String.class);
        //对于私有构造方法需要使用暴力反射去除私有
        con.setAccessible(true);
        //通过反射来实例化对象 Person per = new  Person()
        Person per  = (Person) con.newInstance("p");

四、获取成员方法

public Method[] getMethods():获取所有的公有的方法包括父类方法
public Method[] getDeclaredMethods():获取所有方法
public Method getMethod(@RecentlyNonNull String name, @RecentlyNullable Class<?>... parameterTypes):获取单个公有的方法
public Method getDeclaredMethod(@RecentlyNonNull String name, @RecentlyNullable Class<?>... parameterTypes):获取单个私有的方法

Class cla = Class.forName("com.project.demo.Person");
        //获取私有的单个构造方法(匹配参数)
        Constructor con = cla.getDeclaredConstructor(String.class);
        //对于私有构造方法需要使用暴力反射去除私有
        con.setAccessible(true);
        //通过反射来实例化对象 Person per = new  Person()
        Person per  = (Person) con.newInstance("p");
        //获取私有的成员方法(匹配方法名和参数)
        Method met = cla.getDeclaredMethod("speck",String.class);
        //使用暴力反射去除私有
        met.setAccessible(true);
       //调用方法
        Object o = met.invoke(per,"阿豪");

五、反射获取成员变量
public Field[] getFields():获取公有的成员变量
public native Field[] getDeclaredFields():获取所有的成员变量
public Field getField(@RecentlyNonNull String name):获取单个共有成员变量
public native Field getDeclaredField(@RecentlyNonNull String var1):获取单个私有的成员变量

Class cla = Class.forName("com.project.demo.Person");
        //获取私有的单个构造方法(匹配参数)
        Constructor con = cla.getDeclaredConstructor(String.class);
        //对于私有构造方法需要使用暴力反射去除私有
        con.setAccessible(true);
        //通过反射来实例化对象 Person per = new  Person()
        Person per  = (Person) con.newInstance("p");
        Field  f  =cla.getDeclaredField("age");
        //使用暴力反射去除私有
        f.setAccessible(true);
        //设置成员变量值
        f.set(per,18);

相关文章

  • 七、反射

    一、反射机制 : 将类的各个部分 组成一个新的对象(Class 对象) 就是反射机制 二、获取反射对象 通过 对象...

  • 光照与渲染(七)- 反射

    反射源(Reflection Source) 默认的情况下,场景中的对象会使用Unity内建的标准着色器(Stan...

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • java基础07反射技术

    七、反射技术 反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容。并将字节码文件中的内容都封装成对象...

  • 镜面反射矩阵的推导

    镜面反射是以镜面作为反射平面,实物与反射物到反射平面的距离相等,实物与反射物方向相反,所以,反射矩阵由反射平面确定...

  • reflect.go包学习_之二 指针操作提高反射性能 反射应用

    reflect.go包学习_之二 指针操作提高反射性能 反射应用 反射创建实例 反射信息、反射调用方法、反射修改值...

  • Java互联网公司-经典面试题附答案

    基础:Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)?优点:反射具有解耦性,缺点:反射属...

  • Java反射与joor反射库的使用

    java原生反射的使用 反射构造对象 反射方法 反射字段 joor反射库的使用 github:https://gi...

  • Java反射

    什么是反射? 反射的作用? 反射性能优化?

  • 反射三定律

    反射第一定律:反射可以将interface类型变量转换成反射对象 反射第二定律:反射可以将反射对象还原成inter...

网友评论

      本文标题:七、反射

      本文链接:https://www.haomeiwen.com/subject/eazyurtx.html