Есть ли значимая разница между запуском .class или .java?

#java #.class-file

#java #.class-file

Вопрос:

Я запускаю Java и читал «Привет, мир!» для Microsoft Windows руководство от Oracle. В руководстве говорится, что вы должны использовать javac для компиляции в .class, а затем запускать с

 java -cp . HelloWorldApp
  

Когда я попытался запустить его, я не запустил нужный файл и вместо этого случайно запустил

 java helloworldapp.java
  

После того, как я заметил это, я попробовал оригинальный способ, и они оба напечатали

 Hello World!
  

Это заставило меня задуматься, есть ли какая-либо разница в запуске его как скомпилированного .class по сравнению с исходным кодом .java?

Комментарии:

1. Ну да. Вы компилируете его один раз и загружаете / запускаете файл класса.

2. @OldProgrammer Но если я не компилирую, а просто запускаю, есть ли какая-то разница?

Ответ №1:

В Java 11 теперь можно запускать ‘java <source_file>’ в основном как способ помочь ознакомиться с языком:https://openjdk.java.net/jeps/330

За кулисами сначала компилируется исходный файл, а затем запускается скомпилированный класс. Для более простых вариантов использования (например, 1 файловая Java-программа без зависимостей) поведение, вероятно, будет таким же, но стоит отметить, что это не означает замену «скомпилировать, а затем выполнить» в целом.

Комментарии:

1. Так что нет, верно? Потому что это просто делает это за кулисами?

2. Ах да. Поясню.

Ответ №2:

Существует небольшая разница между запуском его как скомпилированного .class по сравнению с исходным исходным кодом .java .

Однако возможность прямого запуска .java исходного файла является удобством и имеет ограничения:

  • Наиболее серьезным ограничением является то, что он поддерживает только программы с одним исходным кодом. Если у вас есть классы в нескольких исходных файлах, вы не можете использовать эту функцию.

  • Существует только ограниченная поддержка для указания параметров компилятора. Для более продвинутого использования вам необходимо напрямую вызвать компилятор.

  • Повторный запуск программы требует повторной компиляции исходного кода, поэтому запуск программы будет немного медленнее.

Но, кроме этих ограничений, на самом деле нет никакой разницы, кроме удобства выполнения только одной команды.

Конечно, поскольку вы должны разрабатывать Java-программы с использованием IDE, это действительно не имеет значения. Это означает, что функция возвращается к своему первоначальному назначению, как указано в JEP 330: запуск программ с исходным кодом из одного файла, то есть для запуска #! скриптов shebang.

Комментарии:

1. If you have classes in multiple source files, you cannot use this feature —> Я полагаю, вы имели в виду, что не можете , я взял на себя смелость исправить это.