java内部类标识符
由于每个类城市生成一个.class文件,用于容纳与如何建设这个范例的工具有关的所有信息(这种信息发生了一个名为Class工具的元类),所以各人或者会猜到内部类也必需生成相应的.class文件,用来容纳与它们的Class工具有关的信息。这些文件或类的名字遵守一种严格的形式:先是封装类的名字,再跟从一个$,再跟从内部类的名字。譬喻,由InheritInner.java建设的.class文件包罗:
InheritInner.class
WithInner$Inner.class
WithInner.class
假如内部类是匿名的,那么编译器会简朴地生成数字,把它们作为内部类标识符利用。若内部类嵌套于其他内部类中,则它们的名字简朴地追加在一个$以及外部类标识符的后头。
这种生成内部名称的要领除了很是简朴和直观以外,也很是“结实”,可适应大大都场所的要求(注释③)。由于它是Java的尺度定名机制,所以发生的文件会自动具备“与平台无关”的本领(留意Java编译器会按照环境改变内部类,使其在差异的平台中能正常事情)。
③:但在另一方面,由于“$”也是Unix外壳的一个元字符,所以有时会在列出.class文件时碰着贫苦。对一家以Unix为基本的公司——Sun——来说,采纳这种方案显得有些奇怪。我的揣摩是他们基础没有仔细思量这方面的问题,而是认为我们会将全部留意力自然地放在源码文件上。