快捷搜索:

内部类标识符

因为每个类都邑天生一个.class文件,用于容纳与若何创建这个类型的工具有关的所有信息(这种信息孕育发生了一个名为Class工具的元类),以是大年夜家或许会猜到内部类也必须天生响应的.class文件,用来容纳与它们的Class工具有关的信息。这些文件或类的名字遵守一种严格的形式:先是封装类的名字,再跟随一个$,再跟随内部类的名字。例如,由InheritInner.java创建的.class文件包括:

InheritInner.class

WithInner$Inner.class

WithInner.class

假如内部类是匿名的,那么编译器会简单地天生数字,把它们作为内部类标识符应用。若内部类嵌套于其他内部类中,则它们的名字简单地追加在一个$以及外部类标识符的后面。

这种天生内部名称的措施除了异常简单和直不雅以外,也异常“壮实”,可适应大年夜多半场合的要求(注释③)。因为它是Java的标准命名机制,以是孕育发生的文件会自动具备“与平台无关”的能力(留意Java编译器会根据环境改变内部类,使其在不合的平台中能正常事情)。

③:但在另一方面,因为“$”也是Unix外壳的一个元字符,以是无意偶尔会在列出.class文件时碰到麻烦。对一家以Unix为根基的公司——Sun——来说,采取这种规划显得有些稀罕。我的预测是他们根本没有仔细斟酌这方面的问题,而是觉得我们会将整个留意力自然地放在源码文件上。

您可能还会对下面的文章感兴趣: