假设
A a = new A();
a.val = 1;
A.calss 与 a.getClass 能取到 a.val 的值吗?
假设
A a = new A();
a.val = 1;
A.calss 与 a.getClass 能取到 a.val 的值吗?
首先说结论,`A.class`、`a.getClass()`、`Class.forName("A")` 这三种方式没有区别,只是使用场景不同。
在同一个JVM里某一个类的 `Class` 对象是唯一的而且是无状态的,也就是楼上说的类模板。
啥意思呢,比如 `A` 这个类, `A.class` 和 `Class.forName("A")` 和 `a1.getClass()` 、`a2.getClass()`... 这三种方式获取到的 `Class` 对象全部是同一个。
并且这个对象中只有元数据没有任何业务数据,可以说你写这个类的.java文件时这个类的 `Class` 对象中有什么就已经确定了,包括有哪些field、method,这些成员又是怎么组成的等描述 `A` 本身的信息。
想要获取 `A` 的某个对象的属性值 `val` 就必须提供一个真实对象`a`,`Class` 对象提供类 `A` 的基本信息,真实对象`a`提供属性 `val` 的具体值,如此你才能获取到 `a.val`