反射获取成员变量对象API

136 阅读1分钟

image.png

image.png

package run;


import org.junit.Test;

import java.lang.reflect.Field;

public class FileDemo {
    @Test
    public void getFields(){
        Class c = Account.class;
        Field[] fields = c.getFields();//获取所有public修饰的成员变量对象 只能拿public修饰的成员变量对象
        for (Field field : fields) {
            System.out.print(field.getName() + "\t");
        }
    }

    @Test
    public void getDeclaredFields(){
        Class c = Account.class;
        Field[] fields = c.getDeclaredFields();//获取所有的成员变量对象 存在即可拿到
        for (Field field : fields) {
            System.out.print(field.getName() + "\t");
        }
    }
    @Test
    public void getField() throws Exception {
        Class c = Account.class;
        Field field = c.getField("school");//根据成员变量名取单个成员变量对象 只能拿public修饰的成员变量
        System.out.println(field);
    }
    @Test
    public void getDeclaredField() throws Exception {
        Class c = Account.class;//获取类对象
        Field field = c.getDeclaredField("name");//根据成员变量名取单个成员变量对象 存在即可拿到
        System.out.println(field);

        field.setAccessible(true);//暴力反射,如果成员变量是private修饰的,需要暴力反射,打开权限
        Account acc = new Account();//创建Account对象
        field.set(acc, "孙悟空");//赋值
        System.out.println(acc);

        String name = (String) field.get(acc);//取值
        System.out.println(name);

    }


}