空文件是有效的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或类似的东西,如果这是你的问题。