0

コマンド ラインから基本的な Java プログラムを実行するには、次の 3 つの手順を実行します。

  1. コードを書く:

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

  2. javac HellWorld.javaエラーをチェックしてHelloWorld.classファイルを生成するコンパイル。

  3. クラス名を指定してコードを実行 -->java HelloWorld

今、私はその理由を知りたいです:

java HelloWorld動作しますが、クラスファイルのフルパスを指定するとエラーがスローされます

$ java HelloWorld.class 
Error: Could not find or load main class HelloWorld.class

クラス名とファイル拡張子付きのクラス名だけを指定すると、何が違いますか?

4

3 に答える 3

6

クラス名とファイル拡張子付きのクラス名だけを指定すると、何が違いますか?

バイナリに与える引数はjava、ファイル名を意図したものではありません。それはクラス名であることを意味します。特に、Bazパッケージ内で呼び出されたクラスを開始しようとしている場合は、次のfoo.barように実行します。

java foo.bar.Baz

同様に、実行しようとすると、 packageでjava HelloWorld.class呼び出されたクラスを実行しようとしているかのようになりますが、これは正しくありません。classHelloWorld

基本的に、引数をファイル名として表示するのではなく、完全修飾クラス名として表示する必要があります。Baz.classファイルシステムには単純なファイルさえないかもしれません- それはjarファイル内に隠されているかもしれません。

于 2012-08-12T07:47:43.303 に答える
2

クラス名とファイル拡張子付きのクラス名だけを指定すると、何が違いますか?

それは、その通りだからです。Sun / Oracle はjava、Java 1.0 以降、そのように動作するようにコマンドを実装しており、それを変更すると非常に破壊的になります。

Jon が言うように、コマンドの引数はファイル名ではなく、完全修飾クラス名です。実際、その名前のファイルがHelloWorld.class存在しない可能性は十分にあります。JARファイルのメンバーである可能性があります...または、状況によっては、ほぼ何でも可能です。


Java 11 以降では、次のように、1 つのコマンドで 1 つのJava ソース ファイルをコンパイルして実行することもできます。

java HelloWorld.java

(これは、Oracle が Java バイトコード コンパイラのない Java ディストリビューションをサポートしなくなったためです。)

于 2012-08-12T07:55:52.390 に答える
-1

Java プログラミング言語では、ソース ファイル (.java ファイル) は、.class 拡張子を持つ (仮想) 機械可読クラス ファイルにコンパイルされます。

コンパイル後に Java クラス ファイルを実行する場合は、次のコマンドを実行します。

java ハローワールド

注: Java クラスパスを設定する必要があります

于 2012-08-12T07:50:25.093 に答える