public class Father {
public int a = 3;
}
public class Test {
public static void main(String[] args) {
try {
Field test = Father.class.getField("a");
int forA = (int)test.get(new Father());
System.out.println(forA);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在上述Java反射得到类的成员变量值的时候想不明白一个问题。
这个test.get(new Father())有什么作用,在声明test的时候不是已经说明了是Father类的成员变量了吗?
为什么java API不提供一个getValue的方法来获取这个字段的值呢?而是感觉要再次反射去找Father类一样?
没有实例化怎么会有值呢?!
在很多框架中会用到反射机制,反射机制可以像一个接口,你给他一个类或者名字,它可以获取你这类里面的字段,字段的属性,或者创建一个实例等等
test.get(new Father())拿到对象实例的 域成员的值。即获得Father中的a的值
get方法获取值不是一样的吗
int a 不是一个类属性 是一个对象属性 很显然 如果我们要访问它 肯定是对象.a 而不是类.a 这就解释了为什么要 new Father了