JVM中的类类[Venner的书]

时间:2017-07-19 17:46:11

标签: java jvm

我在Venners的书中读到,当虚拟机加载新的 Type 时,虚拟机会实例化一个新的“ Class ”实例,并将此实例与以某种方式加载新类型......

现在我的问题: VM是否将“类型本身的类型”对象实例化为类这是三种参考类型的类型吗?

另一个问题: 当一个B类扩展另一个类A(A是父类)时,方法区域中的B类信息是否包括父类的所有继承特征或者仅仅特定于它(B),并且它的类信息中的超类指针是否足够?还是具体的实施?

由于

1 个答案:

答案 0 :(得分:0)

是的,有一个java.lang.Class类型的实例代表java.lang.Class类型本身。

您可以通过两种方式访问​​此类Class实例,方法是在类的实例上调用getClass()或通过类文字。

Class<?> str = "foo".getClass(); // represents type String
Class<?> cls = str.getClass(); // represents type Class

Class<?> str = String.class; // represents type String
Class<?> cls = Class.class; // represents type Class

显然,您无法通过在对象上调用Class来获取表示基本类型的void实例或getClass(),但仍有两种方法

Class<?> intType = Integer.TYPE; // represents type int
Class<?> voidType = Void.TYPE; // represents type void

Class<?> intType = int.class; // represents type int
Class<?> voidType = void.class; // represents type void

存在一个名为“方法区域”的内存区域已经是一个实现细节,因此数据在其中的组织方式甚至更具实现性。