java11 позволяет компилировать и выполнять в одной строке - PullRequest
0 голосов
/ 21 февраля 2020

в файле с именем filename. java

class filename{
public static void main(String[] a){
System.out.println("From filename main method");
}
}

public class ClassName{
public static void main(String[] a){
System.out.println("From First main method");
}
}

Соблюдайте следующие команды:

Команда 1:

C:\javaDJ>java filename.java
From filename main method

Команда 2:

C:\javaDJ>javac filename.java
filename.java:7: error: class ClassName is public, should be declared in a file named ClassName.java
public class ClassName{
      ^
1 error

Наблюдение:

Команда 1 компилируется (я предполагаю, что внутренне) и успешно выполняется.
Команда 2 генерирует ошибку компиляции.

Постановка задачи:

Как java cmd способен скомпилировать файл с именем filename. java, когда файл (filename. java) содержит класс publi c (ClassName), который не называется "filename. java" ( имя файла-имени.)?

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Чтобы выделить определенный c раздел из JEP # Запуск однофайловых программ с исходным кодом относительно поведения

В режиме исходного файла, выполнение происходит следующим образом:

  • Класс, который должен быть выполнен, является первым классом верхнего уровня, найденным в исходном файле. Он должен содержать объявление стандартного публичного метода stati c void main (String []).
2 голосов
/ 21 февраля 2020

Функция, которая позволила вам успешно выполнить Команда 1 , была введена в Java 11. Эта функция позволяет выполнять файл исходного кода Java непосредственно с помощью интерпретатора java. Исходный код компилируется в памяти и затем выполняется интерпретатором, без создания файла .class на диске. Проверьте this для получения дополнительной информации.

Ошибка, которую вы получили в Команда 2 существует с начала Java.

...