空文件是有效的Java源文件,但它是如何在JVM中处理的?
答案 0 :(得分:9)
.java文件和.class文件之间没有一对一的关系。你拥有的是类(或类声明)和.class文件之间的一对一关系。
零类声明的Java源文件不会产生任何.class
个文件,因此JVM根本不会处理。
$ touch Test.java
$ ls
Test.java
$ javac Test.java
$ ls
Test.java
在Java语言规范中,Java源文件与编译单元同义。 JLS中的相关部分是7.3 Compilation Units。
语法描述如下:
CompilationUnit:
PackageDeclaration opt ImportDeclarations opt TypeDeclarations opt
...
opt -subscript表示该部分是可选的。由于TypeDeclarations是可选的,因此不需要存在类声明。
答案 1 :(得分:3)
javac为*.class
文件中的每个文件生成.java
个文件。所以 - 没有一个,编译器什么都不做。什么都没有给jvm。
答案 2 :(得分:1)
空的源文件不会创建任何类文件,因此JVM无需“处理”。并且一个空的类文件(编译器不会创建它)是无效的,可能导致ClassFormatError或类似的东西,如果这是你的问题。