空文件是有效的Java源文件。 如何在JVM中处理它?

空文件是有效的Java源文件,但它是如何在JVM中处理的?

.java文件和.class文件之间没有一对一的关系。 你所拥有的是 (或类声明 )和.class文件之间的一对一关系。

具有零类声明的Java源文件不会产生任何.class文件 ,因此它根本不是由JVM 处理的。

 $ touch Test.java $ ls Test.java $ javac Test.java $ ls Test.java 

在Java语言规范中,Java源文件与编译单元同义。 JLS中的相关部分是7.3编译单元 。

语法描述如下:

CompilationUnit:
PackageDeclaration opt ImportDeclarations opt TypeDeclarations opt

opt -subscript说该部分是可选的。 由于TypeDeclarations是可选的,因此不需要存在类声明。

javac为.java文件中出现的每个文件生成*.class文件。 所以 – 没有一个,编译器什么都不做。 什么都没有给jvm。

空源文件不会创建任何类文件,因此JVM无需“处理”。 并且一个空的类文件(编译器不会创建它)是无效的,可能导致ClassFormatError或类似的东西,如果这是你的问题。