java复习

2020-08-02反射获取成员变量并使用

2020-08-11  本文已影响0人  智障猿

通过反射获取成员变量

方法 说明
getFields() 返回一个包含Field对象的数组。Field对象反映由该Class对象表示的类或接口的所有可访问的公共成员变量
getDeclaredFields () 返回的数组 Field对象反映此表示的类或接口声明的所有成员变量
getField(String name) 返回一个Field对象,该对象反映由该Class对象表示的类或接口的指定公共成员变量
getDeclaredField(String name) 返回一个Field对象,该对象反映由该Class对象表示的类或接口的指定成员变量
public class Demo {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        Class<?> aClass = Class.forName("commm.Student");
        //获取公共成员变量
        Field[] field = aClass.getFields();
        for (Field field1:field){
            System.out.println(field1);
        }
        //获取所有成员变量
        System.out.println("--------------------");
        Field[] declaredFields = aClass.getDeclaredFields();
        for (Field field2:declaredFields){
            System.out.println(field2);
        }
        System.out.println("--------------------");
        //根据成员变量名获取公共成员变量
        Field name = aClass.getField("address");
        System.out.println(name);
        System.out.println("--------------------");
        //根据成员变量名获取成员变量
        Field age  = aClass.getDeclaredField("age");
        System.out.println(age);
    }
}

使用通过反射获得的成员变量

方法 说明
set(Object obj, Object value) 给object对象的成员变量赋值为value
public class Demo {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class<?> aClass = Class.forName("commm.Student");
        //通过反射获得构造方法对象
        Constructor<?> declaredConstructor = aClass.getDeclaredConstructor();
        declaredConstructor.setAccessible(true);
        //通过构造方法对象实例化对象
        Object object = declaredConstructor.newInstance();
        //通过反射获得成员变量
        Field age  = aClass.getDeclaredField("age");
        System.out.println(age);
        age.set(object,21);
        System.out.println(object);
    }
}

测试

public class Demo {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class<?> aClass = Class.forName("commm.Student");
        //获取构造方法对象
        Constructor<?> constructor = aClass.getConstructor();
        //根据构造方法对象实例化
        Object o = constructor.newInstance();
        //获取成员变量
        Field address = aClass.getField("address");
        address.set(o,"山东");
        Field age = aClass.getDeclaredField("age");
        age.setAccessible(true);//取消访问检查
        age.set(o,18);
        Field name = aClass.getDeclaredField("name");
        name.setAccessible(true);//取消访问检查
        name.set(o,"zzt");
        System.out.println(o);
    }
}
上一篇下一篇

猜你喜欢

热点阅读