java反射机制中Class类中有两个方法getField,getDeclaredField:
public Field getField(String name)
throws NoSuchFieldException,
SecurityException
获取的是公共成员变量,若成员变量为private,仍使用该方法来获取的话,会抛出NoSuchFieldException
public Field getDeclaredField(String name)
throws NoSuchFieldException,
SecurityException
获取的是该对象中所有声明的成员变量。
获取给类对象中某一成员变量的值,则进一步调用Field中的
public Object get(Object obj)
throws IllegalArgumentException,
IllegalAccessException
若该成员变量为private 则不可以通过Filed中提供的get(Object o)来获取当前值。对于私有成员变量,只能通过getMethod获得它对应的get,set方法,再进行操作。
若改成员变量为public 则可以通过Filed中提供的get(Object o)来获取当前值,o为当前对象,若成员变量为static则可以o值可以传null,这个就很好理解。若已知成员变量的类型可以直接用getInt,getDouble等返回对应类型的值。
ps:NoSuchFieldException,该异常不是没有找到文件,而是没有找到对应成员变量。