反射获取成员变量并使用

Field[] getFields() 返回包含一个数组Field对象反射由此表示的类或接口的所有可访问的公共字段类对象

public class ReflectDemo01 {
    public static void main(String[] args) throws ClassNotFoundException {
        //获取Class对象
        Class<?> c = Class.forName("com.reflect_02.Student");

        //Field[] getFields()
        //返回包含一个数组 Field对象反射由此表示的类或接口的所有可访问的公共字段类对象。
        Field[] fields = c.getFields();
        for (Field field : fields){
            System.out.println(field);
        }
    }
}

该方法运行结果

Field[] getDeclaredFields()  返回的数组Field对象反映此表示的类或接口声明的所有字段类对象
public class ReflectDemo01 {
    public static void main(String[] args) throws ClassNotFoundException {
        //获取Class对象
        Class<?> c = Class.forName("com.reflect_02.Student");

        //Field[] getDeclaredFields()
        //返回的数组Field对象反映此表示的类或接口声明的所有字段类对象。
        Field[] fields = c.getDeclaredFields();
        for (Field field : fields){
            System.out.println(field);
        }
    }
}

该方法的运行结果:

获取单个公共访问权限的成员变量的对象的方法

公共对象:Field getField(String name)  返回一个Field对象,它反映此表示的类或接口的指定公共成员字段类对象

先通过getConstructor()方法来获取构造方法,然后通过 构造方法.newInstance()方法来创建对象,通过getField()方法来获取成员变量,最后通过set()方法来为成员变量赋值,set赋值给的是构造方法所创建的对象的成员变量。

public class ReflectDemo01 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        //获取Class对象
        Class<?> c = Class.forName("com.reflect_02.Student");

        //Field getField(String name)
        //返回一个Field对象,它反映此表示的类或接口的指定公共成员字段 类对象。
        Constructor<?> con = c.getConstructor();
        Object obj = con.newInstance();

        Field addressField = c.getField("address");
        addressField.set(obj,"西安"); //给obj的成员变量address赋值为 西安
        System.out.println(obj);
    }
}

获取单个任意访问权限的成员变量的对象的方法:

Field getDeclaredField(String name)  返回一个Field对象,它反映此表示的类或接口的指定已声明字段类对象

同样,在获取私有访问权限时,需要取消访问检查

 1 public class ReflectDemo01 {
 2     public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
 3         //获取Class对象
 4         Class<?> c = Class.forName("com.reflect_02.Student");
 5 
 6         Constructor<?> con = c.getConstructor();
 7         Object obj = con.newInstance();
 8 
 9         //Field getDeclaredField(String name)
10         //返回一个 Field对象,它反映此表示的类或接口的指定已声明字段 类对象。
11         Field nameFiled = c.getDeclaredField("name");
12         nameFiled.setAccessible(true);
13         nameFiled.set(obj,"林青霞");
14         System.out.println(obj);
15     }
16 }

猜你喜欢

转载自www.cnblogs.com/pxy-1999/p/13172527.html
今日推荐