反射获取成员变量

获取类中成员变量对象的方法

getDeclaredFields()

getDeclaredField (String name)

 

反射得到成员变量可以做什么?

依然是在某个对象中取值和赋值。

void set​(Object obj, Object value):

Object get​(Object obj)

如果某成员变量是非public的,需要打开权限(暴力反射),

然后再取值、赋值 setAccessible(boolean)



public class FieldDemo01 {
/**
* 1.获取全部的成员变量。
* Field[] getDeclaredFields();
* 获得所有的成员变量对应的Field对象,只要申明了就可以得到
*/
@Test
public void getDeclaredFields(){
//a.定位Class对象
Class c = Student.class;
//b.定位全部成员变量
Field[] fields = c.getDeclaredFields();
//c.遍历一遍
for (Field field :fields) {
System.out.println(field.getName()+"==>"+field.getType());
}
}

/**
2.获取某个成员变量对象 Field getDeclaredField(String name);
*/
@Test
public void getDeclaredField() throws Exception {
//a.定位Class对象
Class c = Student.class;
//b.分局名称定位某个成员变量
Field f = c.getDeclaredField("age");
System.out.println(f.getName()+"==>"+f.getType());
}
}
=====
public class FieldDemo02 {
@Test
public void getDeclaredFields() throws Exception {
// a.反射第一步,获取类对象
Class c = Student.class;
// b.提取某个成员变量
Field[] ageF = c.getDeclaredFields();
for (Field field :ageF) {
System.out.println(field.getName()+"==>"+field.getType());
}

}

@Test
public void getDeclaredField() throws Exception {
// a.反射第一步,获取类对象
Class c = Student.class;
// b.提取某个成员变量
Field ageF = c.getDeclaredField("age");

ageF.setAccessible(true);

//c.赋值
Student s = new Student();
ageF.set(s,18);
System.out.println(s);

//d.取值
int age = (int)ageF.get(s);
System.out.println(age);
}
}

posted on 2022-04-05 09:39  我要当程序源  阅读(283)  评论(0)    收藏  举报

导航