Пустой файл является допустимым исходным файлом Java, но как он обрабатывается внутри JVM?
Пустой файл является допустимым исходным файлом Java. Как он обрабатывается внутри JVM?
Ответ 1
Между .java файлами и .class файлами нет отношения "один-к-одному". То, что у вас есть, - это взаимно однозначное отношение между классами (или объявлениями классов) и .class-files.
Java-исходный файл с нулевыми объявлениями класса не приведет к каким-либо файлам .class
, поэтому он вообще не обрабатывается JVM.
$ touch Test.java
$ ls
Test.java
$ javac Test.java
$ ls
Test.java
В спецификации языка Java файл с исходным кодом Java является синонимом модуля компиляции. Соответствующий раздел в JLS 7.3 Компиляционные единицы.
Грамматика описывается следующим образом:
CompilationUnit:
PackageDeclaration opt ИмпортDeclarations opt ТипDeclarations opt
...
opt -subscript говорит, что деталь является необязательной. Поскольку TypeDeclarations не является обязательным, объявления классов не должны существовать.
Ответ 2
javac создает файлы *.class
для каждого из них, которые встречаются в файле .java
. Итак - ни один из них, компилятор просто ничего не делает. Ничто не дает jvm.
Ответ 3
Пустой исходный файл не будет создавать файлы классов, поэтому JVM не будет "обрабатывать". И пустой файл класса (который не то, что создаст компилятор) недействителен, вероятно, приводит к ClassFormatError или что-то в этом роде, если это был ваш вопрос.