InnerClasses attribute描述说
如果类具有作为类或接口的成员,则其
constant_pool表(及其内部InnerClasses属性)必须引用
给每个这样的成员,即使该成员没有被其他提及
班上。这些规则意味着嵌套的类或接口成员
对于每个封闭类以及每个类都有InnerClasses信息
每个直属成员。
external_class_info_index:
如果C是,而不是类或接口的成员(即,如果C是,则a
顶级类或接口(JLS§7.6)或本地类(JLS§14.3)
或匿名类(JLS§15.9.5)),...
您可以从第二段中注意到,本地类或匿名类未被视为“成员”。这意味着第一段不适用于本地类或匿名类。但是当我编译这段代码(尝试过eclipse编译器和javac)时:
package bc_data;
public class Pokus {
public void metoda() {
class Pokus_Lokalni {
}
}
}
javap -v Pokus.class
Classfile /home/jara/projects/bp/bc_data/src/bc_data/Pokus.class
Last modified May 15, 2015; size 321 bytes
MD5 checksum cf9cd7707c297e7ba43b8408a9ff6e2f
Compiled from "Pokus.java"
public class bc_data.Pokus
SourceFile: "Pokus.java"
InnerClasses:
#5= #4; //Pokus_Lokalni=class bc_data/Pokus$1Pokus_Lokalni
minor version: 0
major version: 51
flags: ACC_PUBLIC, ACC_SUPER
您可以看到InnerClasses属性中包含本地类
Pokus_Lokalni
,即使类Pokus
并未另行提及,也可以将其视为“成员”吗?还是为什么在InnerClasses属性中包含本地类Pokus_Lokalni
?它是由规范强制执行的吗? 最佳答案
我的想法是:
Class.getDeclaredClasses
)。 您可以从第二段中注意到,本地类或匿名类未被视为“成员”。
是的,他们不是会员。它们仍然是内部类,因此它们将正常显示在这里。