反射字段的时候要注意了,如果是静态属性的话,在反射后调用其set(Object obj, Object value)方法的时候,这时的obj可以是指定的对象,也可以为空。但是在反射后调用其get方法的时候,如getInt(Object obj) ,这时的obj不能为空,尽管这个属性是static的。我做了个试验。如下:
class Person
{
private static int grade = 99;
}
@Test
public void test3() throws Exception {
Person p = new Person();
Class c = Class.forName("Person");
Field f = c.getDeclaredField("grade");// 通过得到定义的字段。
f.setAccessible(true);
f.set(p, 24);//这里的p可以为null,也可以为指定的对象p。
System.out.println(f.getInt(p));//这里调用getInt()时,必须为其其指定对象p,不然编译器会报错。