反射学习——Robyn编程学习(Java)

反射

为什么我们需要反射?

因为反射就是通过找到一个类的CLASS对象,从而对该类的属性和方法进行操作,可以理解为使用了一个镜子来操控类。

反射原理图

反射优化

类加载的过程

反射的演示

 //得到Class对象
        Class<?> stuClass = Class.forName("reflection.Student");
        //有参数时创建实例,通过构造器对象创建
        Constructor<?> constructor = stuClass.getConstructor(String.class);
        Object hsp = constructor.newInstance("hsp");
        //无参数时,可以直接创建对象
        Object o = stuClass.newInstance();
        System.out.println(o.getClass());
        Field name = stuClass.getField("name");
        name.set(o,"age");
        System.out.println(name.get(o));
        Field year = stuClass.getDeclaredField("year");
        year.setAccessible(true);//这里是使用爆破来访问私有属性
        year.set(o,77);
        year.set(null,77);//类变量可以直接设置
        System.out.println(year.get(o));

        Method setName = stuClass.getDeclaredMethod("setName", String.class);
        Method setYear = stuClass.getDeclaredMethod("setYear", int.class);
        setName.invoke(o,"age");
        setYear.invoke(null,24);//方法反向调用
        System.out.println(name.get(o));
posted @ 2022-10-17 22:00  深海之燃  阅读(23)  评论(0)    收藏  举报