以如下内容为例
其生成的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个外部类项