Подтвердить что ты не робот

Пустой файл является допустимым исходным файлом Java. Как он обрабатывается внутри JVM?

Пустой файл является допустимым исходным файлом Java, но как он обрабатывается внутри JVM?

4b9b3361

Ответ 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 или что-то в этом роде, если это был ваш вопрос.