1. ホーム
  2. java

[解決済み] java' コマンドは、Java プログラムをコンパイルするのですか?

2022-06-01 02:52:27

質問

インターネット上のほとんどのサイトに書かれています。

<ブロッククオート

"を使用する。 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)

どのように解決するのですか?

Java 11以前では、コードを実行するには、まずコンパイルし、それから実行する必要があります。以下はその例です。

javac test.java
java test

Java 11以降でも javac + java を実行することもできます。 java を単独で実行して、コードをコンパイルし、自動実行することもできます。ただし .class ファイルは生成されないことに注意してください。以下はその例です。

java test.java

もしあなたが java -help を実行すると、許可された様々な使い方が表示されます。私のマシンでは、以下のようになります。最後の1つは、あなたが遭遇したものです。 java [options] <sourcefile> [args] で、これは "単一のソースファイル・プログラムを実行します" 。

$ java -help
Usage: java [options] <mainclass> [args...]
           (to execute a class)
   or  java [options] -jar <jarfile> [args...]
           (to execute a jar file)
   or  java [options] -m <module>[/<mainclass>] [args...]
       java [options] --module <module>[/<mainclass>] [args...]
           (to execute the main class in a module)
   or  java [options] <sourcefile> [args]
           (to execute a single source-file program)

UPDATEです。

BillKさんご指摘の通り、OPも質問しています。

なぜ javac コマンドが必要なのでしょうか?

私たちが必要とする理由は javac を作成するためです。 .class ファイルを作成することで、コードを現在のように作成、テスト、配布、実行、共有などできるようにすることです。の動機は JEP 330 をより簡単にすることでした。 Java の学習の初期段階や、小さなユーティリティ・プログラムを書くとき。 他の既存の使用法を変更することなく。