Разница между запуском Java из командной строки с окончанием файла и без - PullRequest
0 голосов
/ 15 января 2019

Я только что написал простой класс Hello World с именем Hello:

public class Hello {
  public static void main(String[] args) {
    System.out.println("Hello world");
  }
}

Насколько я знаю, "нормальный" способ запустить его из командной строки -

1) его компиляция (и создание файла Hello.class):

javac Hello.java

2) запустить его:

java Hello

Я просто случайно обнаружил, что можно также просто вызывать

java Hello.java

без создания файла Hello.class первым! Это также не создает собственный файл класса ..

Итак, теперь я спрашиваю себя, что именно происходит, когда я просто запускаю java Hello.java?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

С JDK 11 вы можете запускать Однофайловые программы с исходным кодом с помощью интерпретатора. Это не сработает, если в каталоге разбросано несколько файлов.

0 голосов
/ 15 января 2019

ТЛ; др

См. JEP 330 с описанием этой новой функции в OpenJDK 11 и более поздних версиях, где java MyClass.java будет компилировать и запускать один файл исходного кода.

Java 11

Вы обнаружили новую функцию в реализациях Java 11, построенных на OpenJDK 11. Для удобства теперь один файл .java можно скомпилировать , а можно выполнить, просто вызвав java в командной строке.

java автоматически вызывает javac для выполнения компиляции. Полученный скомпилированный класс запускается.

См. JEP 330: Запуск однофайловых программ с исходным кодом . Чтобы процитировать этот JEP:

Однофайловые программы, в которых вся программа помещается в один исходный файл, распространены на ранних этапах изучения Java и при написании небольших служебных программ. В этом контексте, это чистая церемония, чтобы скомпилировать программу перед ее запуском. Кроме того, один исходный файл может компилироваться в несколько файлов классов, что добавляет издержки на упаковку к простой цели «запустить эту программу». Желательно иметь возможность запускать программу непосредственно из исходного кода с помощью Java Launcher:

java HelloWorld.java

И, да, эта простая функция должна была быть создана десятилетия назад, чтобы помочь бесчисленным начинающим, пытающимся изучать Java.


Предостережение: реализация Java , а не , построенная из исходного кода OpenJDK, может включать или не включать такую ​​функцию. В этом разница между JEP (только OpenJDK ) и JSR (определено в спецификациях Java ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...