java 反射 成员变量

一、获取

1、语法

// 获取 成员变量

// 1.只包含public
class对象.getFields()
// 2.包含private
class对象.getDeclaredFields()

// 指定成员变量
//1.public修饰
class对象.getField("字段名")
//2.private修饰
class对象.getDeclaredField("字段名")

2、案例

@Test
public void getValue() throws Exception{
    Class<Person> personClass = Person.class;
    // public 修饰的成员变量
    Field[] fields = personClass.getFields();
    for (Field field : fields) {
        System.out.println(field);
    }
    System.out.println("=======================================");
    // 所有成员变量,包括private
    Field[] fields1 = personClass.getDeclaredFields();
    for (Field field : fields1) {
        System.out.println(field);
    }
    System.out.println("---------------------------------------");
    // 指定成员变量 public
    Field name = personClass.getField("name");
    System.out.println(name);
    // 指定成员变量 private
    Field age = personClass.getDeclaredField("age");
    System.out.println(age);
}

二、使用(set和get )

1、语法

// 设置
成员变量对象.set(对象, "新值");
// 获取
成员变量对象.get(对象);

注意:private 成员变量

成员变量对象.setAccessible(true);

2、案例

@Test
public void valueUse() throws Exception{
    Class<Person> personClass = Person.class;
    Constructor<Person> constructor = personClass.getConstructor(String.class, Integer.class);
    Person person = constructor.newInstance("小米", 18);
    Field name = personClass.getField("name");
    // 设置
    name.set(person, "小智");
    // 获取
    Object o = name.get(person);
    System.out.println(o);
}

 

posted @ 2025-04-21 22:21  市丸银  阅读(19)  评论(0)    收藏  举报