我在Venners的书中读到,当虚拟机加载新的 Type 时,虚拟机会实例化一个新的“ Class ”实例,并将此实例与以某种方式加载新类型......
现在我的问题: VM是否将“类”类型本身的类型“类”对象实例化为类这是三种参考类型的类型吗?
另一个问题: 当一个B类扩展另一个类A(A是父类)时,方法区域中的B类信息是否包括父类的所有继承特征或者仅仅特定于它(B),并且它的类信息中的超类指针是否足够?还是具体的实施?
由于
答案 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
存在一个名为“方法区域”的内存区域已经是一个实现细节,因此数据在其中的组织方式甚至更具实现性。