Компилирует ли команда java Java-программы?

Большинство веб-сайтов в Интернете говорят:

«используйте команду javac для компиляции файла .java. Затем запустите его с помощью команды java»

Но сегодня я попытался запустить Java-программу без javac, и я получил странный результат.

Вот содержимое файла с именем hello.java:

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

Затем я запустил:

$ javac hello.java

, что дает мне эту ошибку:

hello.java:1: error: class Myclass is public, should be declared in a file named Myclass.java
public class Myclass {
       ^
1 error

Но когда я запускаю его без команды javac, он выполняется без ошибок.

$ java hello.java
hello world

Команда java также компилирует программу? Если да, зачем нам команда javac?

Версия моего java:

openjdk version "12.0.2" 2019-07-16
OpenJDK Runtime Environment (build 12.0.2+10)
OpenJDK 64-Bit Server VM (build 12.0.2+10, mixed mode)
118
задан LogicalBranch 26 September 2019 в 17:38
поделиться

2 ответа

Эта функция обеспечивает способность выполнить Java однофайловый исходный код непосредственно без любой компиляции, избегая утомительных шагов, которые включили ранее для выполнения просто простого привет мировая программа.

Java 11+ Launch Single-File Source-Code Programs 

, Почему Вам нужно это, Если Вы вспоминаете былые времена незадолго до Java SE 11 (JDK 11), скажите, что у Вас есть исходный файл HelloUniverse.java, который содержит определение класса и статический основной метод, который распечатывает как одна строка текста к терминалу как следующее:

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

Обычно для выполнения этого класса, во-первых, необходимо было бы скомпилировать его с помощью компилятора Java (javac), который приведет к файлу HelloUniverse.class:

$ javac HelloUniverse.java
Then you would use a java virtual machine (interpreter) command to run the resulting class file:

$ java HelloUniverse
Hello InfoQ Universe

Это запускает JVM, загружает класс и выполняет код.

, Но что, если Вы хотите быстро протестировать часть кода и хотеть экспериментировать. Те два шага в процессе могут походить на небольшое количество тяжелого подъема. В Java SE 11, Вы получаете опцию запустить единственный файл исходного кода непосредственно без промежуточной компиляции.

1
ответ дан 5 October 2019 в 23:31
поделиться

Для ответа, почему эта ошибка дана имя класса для файла должно соответствовать файлу basename.

, у Вас есть две опции иметь эту работу кода для традиционного javac; java последовательность:

  1. Переименовывают класс к public class Hello, или

  2. Переименовывают hello.java к myclass.java.

java интерпретатор для Java 11 не налагает это требование. Класс, который содержит main, может иметь любое имя, пока это - первый класс в файле. Это было главным образом предназначено, чтобы упростить процесс обучения для новичков и позволить "сценарии Java" с хижиной ( касательно ).

6
ответ дан 23 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: