为什么javac仍然为每个非公共顶级类创建`.class`文件?

时间:2017-11-22 19:55:28

标签: java

如果.java文件有多个顶级类,则它可以只有一个顶级公共类,而所有其他顶级类都不能公开。

当我编译这样的.java文件(例如javac my.java)时,我发现每个顶级类都创建了一个.class文件。由于除了一个顶级类之外的所有类都是非公共类,为什么仍然为每个非公共顶级类创建.class个文件?

感谢。

2 个答案:

答案 0 :(得分:2)

来自JVM spec

  

每个类文件都包含单个类,接口或模块的定义。

可见性不会对此产生影响。

答案 1 :(得分:1)

轻率的答案是"你期望它做什么?"每个.class文件都包含要执行的JVM的字节码,Java规范要求代码中定义的每个类都成为.class文件。

更一般地说 - 请记住,编译器和JVM强制执行类(公共,私有,内部,匿名,等等......)的可见性。不是通过文件的可见性或存在。