反射篇笔记

2023-12-13 10:02:33

反射的本质:加载类。

把某个类的字节码文件加载到内存中。并允许以变成的方式解剖类中的各种成分(成员方法,变量,构造器)。

例如在使用IDEA时,他的提示,就是利用反射,提前将类中的信息解剖展示出来。

反射的第一步:获取类的class对象

         //1.通过类名获取class对象
        Class a = User.class;

        //2.通过全类名获取class对象
        Class b = Class.forName("com.datatype.User");

        //3.通过对象获取class对象
        Class c = new User().getClass();

        System.out.println(a==b);
        System.out.println(c==b);
        //其中a,b,c都是同一个对象。

2.1:通过反射获取构造器实例化对象

        //获取类的class对象
        Class<User> a = User.class;
        //通过class对象获取有参构造器
        Constructor<User> b = a.getDeclaredConstructor(Integer.class, String.class, Integer.class, Boolean.class);
        //通过class对象获取无参构造器
        Constructor<User> c = a.getDeclaredConstructor();
        //修改成员的访问权限
        b.setAccessible(true);
        //通过反射创建类的实例
        User user = b.newInstance(12, "李兆", 13, false);
        System.out.println(user.toString());

2.2:.通过反射向字段赋值,在传递给对象

        //通过全类名创建对象
        Class a = Class.forName("com.datatype.User");
        //获取无参构造
        Constructor Aconstructor = a.getDeclaredConstructor();
        //修改访问权限
        Aconstructor.setAccessible(true);
        //通过无参构造创建对象
        User user = (User) Aconstructor.newInstance();
        //获取字段
        Field name = a.getDeclaredField("name");
        name.setAccessible(true);
        name.set(user, "李兆");
        System.out.println(user);

2.3:通过反射运行方法

        Class a = User.class;
        //获取成员方法,需要参数-->方法名,参数类型
        Method toString = a.getDeclaredMethod("toString");
        System.out.println(toString.invoke(new User()));

对于注解的使用

文章来源:https://blog.csdn.net/weixin_55990599/article/details/134921889
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。