实例探索Class文件(7)

以如下内容为例 
 

实例探索Class文件


其生成的class文件如下: 

其InnerClasses属性内容为: 

其中匿名内部类Runnable的全限定名为InnerClassTest$1,由于其不是一个成员嵌套类(该类是局部嵌套类),其outer_class_info_index 为0,由于该类是一个匿名内部类,其inner_name_index为0(即简单名称为空) 
局部嵌套类NestedLocalClass的全限定名为InnerClassTest$1NestedLocalClass,由于其不是一个成员嵌套类,其outer_class_info_index为0,其简单名称为”NestedLocalClass”,access_flag为final 
成员嵌套类NestedMemberClass的全限定名为InnerClassTest$NestedMemberClass,其简单名称为”NestedMemberClass”,access_flag为public static final

此外,我们注意到内嵌类的内容会定义在各自的class文件中,而不会出现在InnerClassTest类的class文件中,在NestedMemberClass的class文件中有着如下的InnerClasses属性: 

在subClass的class文件中也有着如下的InnerClasses属性: 

可以看出,每个作为外围类的内部类的类都将保存在该外围类的CONSTANT_Class常量池中,并有一个inner_class_info结构加以描述 
如InnerClassTest的3个内部类项,NestedMemberClass的第二个内部类项
 
但是需要注意,subClass在被没有被InnerClassTest直接引用时,是不会出现在InnerClassTest的InnerClasses属性中的 
另外,InnerClasses还将表述内嵌类型的外围类,作为内部类的所有外围类都将保存在该内部类的CONSTANT_Class常量池中,并有一个inner_class_info结构加以描述 
如NestedMemberClass的第1个外部类项,subClass的2个外部类项

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/21d552f6d5eec79a30d2df013e6c86d7.html