Пустой файл является допустимым исходным файлом 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 или что-то в этом роде, если это был ваш вопрос.