Между файлами .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 ТипDeclarations opt ...
Подпись opt говорит о том, что эта часть является необязательной.Поскольку TypeDeclarations является необязательным, объявления классов не должны существовать.