Java 反射获取Field

反射获取Field :成员变量

  1. 设置值
    void set(0bject obj, object value)

  2. 获取值
    get(object obj)

  3. 忽略访问权限修饰符的安全检查
    setAccessible(true) :暴力反射

Field[] getFields() 获取所有public修饰的成员变量
Field getField(string name) 获取指定名称的成员变量
Field[] getDeclaredFields()获取所有的成员变量,不考虑修饰符
Field getDeclaredField(String name)
package cn.abc.reflect;

import cn.abc.domin.Person;

import java.lang.reflect.Field;

public class ReflectDemo02 {

    public static void main(String[] args) throws Exception {
        //获取Person的Class对象
        Class personClass = Person.class;

        //1.Field[] getFields():获取public修饰的成员变量
        Field[] fields = personClass.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }

        //2.getField(String name)
        Field abc = personClass.getField("abc");
        //获取成员变量abc的值
        Person p = new Person();
        Object value = abc.get(p);
        System.out.println(value);//null
        //设置abc的值
        abc.set(p,"李白");
        System.out.println(p);


        //3.getDeclaredFields()获取所有的成员变量,不考虑修饰符
        Field[] declaredFields = personClass.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            System.out.println(declaredField);
        }

        //4.getDeclaredField(String name)
        Field name = personClass.getDeclaredField("name");
        //忽略访问权限修饰符的安全检查
        name.setAccessible(true);//暴力反射
        Object value2 = name.get(p);
        System.out.println(value2);

    }
}

你可能感兴趣的:(Java)