美文网首页java复习
2020-08-02反射获取成员变量并使用

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

作者: 智障猿 | 来源:发表于2020-08-11 09:23 被阅读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);
        }
    }
    

    相关文章

      网友评论

        本文标题:2020-08-02反射获取成员变量并使用

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