七、反射

2022-05-17  本文已影响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);
上一篇 下一篇

猜你喜欢

热点阅读