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)
カーン:

Javaの11の前に、あなたが最初にそれをコンパイルする必要があり、あなたのコードを実行するために、あなたはそれを実行することができます。ここでは例を示します。

javac test.java
java test

Javaの11以来、あなたはまだやることができますjavac+ java、またはあなたが実行することができますjavaコンパイルし、それ自体で、あなたのコードを自動実行します。何のことに注意してください.classファイルが生成されません。ここでは例を示します。

java test.java

あなたが実行した場合java -help、あなたは様々な用途許可が表示されます。ここでは、それは私のマシン上で次のようになります。最後のものは、あなたがに走ったものです: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)

更新:

@BillKで指摘したように、OPも尋ねました:

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

私たちが必要とする理由は、javac作成することです。.classそれが今日であるようにそのコードがなど、作成したテスト、分散、実行、共有することができるので、ファイルを。動機JEP 330は、それが簡単のために作ることだった「は、Javaを学習の初期段階、および小さなユーティリティプログラムを書くときに、」他の既存の用途を変更せずに。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=304536&siteId=1