反射获取成员变量
获取类中成员变量对象的方法
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);
}
}
浙公网安备 33010602011771号