我学会了here,即使这是最佳实践并且尽管大多数编译器要求您这样做,但它并不是严格要求在其包含的公共类之后命名的.class
至少从语言规范的角度来看。.class文件的Java语言命名约定
我搜索了JLS和JVM规范,但无法找到本主题讨论的实际章节。对我而言,这个问题在之间根本没有被处理过。
如果存在的话,Oracle官方文档可以确认或揭穿以下声明?
给予
.class
文件相同的名称,它们所包含的公共类 - 无论他们做的 - 简直是必须的,但根据JLS这不是严格的。从JLS的角度来看,编译器会选择是否设置这样的限制。
我会用进一步引用出版物/著作该主题的章节或页码。 – Salvioner
请注意,每个.java源可能有多个.class文件,即每个创建的内部类都有一个.class文件。对于匿名内部类,通常对于命名内部类的格式为'[toplevel_public_class] $ [inner_class] .class',对于匿名内部类格式为'[toplevel_public_class] $ [number] .class'“。我不知道这是一个规则还是一种标准的做法,但是.class文件并不总是完全匹配顶级类的名称(尽管它是名称的重要组成部分)。 – Thomas
顺便说一句,我可能在这里是错误的,但从运行时的角度来看,文件名应该不重要,因为文件包含所有必要的信息。但是,具有匹配的文件名称使人类或基于文本的操作更容易(例如,尝试在jar中查找类以加载它),因为您不必扫描每个文件以找到正确的文件。对源文件的限制也可能主要是为了防止人们将其搞乱;) – Thomas