クラスパス、パッケージ和瓶

エラー:検索またはメインクラスをロードできません。

まず、例が与えられます。

  1. E:\aaa作成A.javaディレクトリ

    A.java

    public class A {
    	public static void main(String[] args) {
    		System.out.println("AAA");
    	}
    }
    
  2. cmdでコンパイルA.java

    javac E:\aaa\A.java
    

    AAAの下の世代A.class \ディレクトリ:Eで、このとき

  3. (:\ AAAディレクトリEで)cmdを実行することでA.class

    java A
    

    今回はそれが正常に実行することができます

  4. (:\ディレクトリEで)cmdを実行することでA.class

    何のクラスAが存在しないので、この時間は、それは失敗でしょう

3と4の比較により、我々は時にjavaコマンドは、現在のディレクトリにあるクラスを見つけることができない場合は、エラーが発生します、カレントディレクトリにあるように、現在のディレクトリに再帰的でない検索サブディレクトリを見ていると結論づけることができます。

私はEにしたい場合は、次のファイル名を指定して実行\ディレクトリEを:ディレクトリ内の\ AAA \クラスファイル、どのようにそれを行うには?このオプションクラスパスを使用する必要があります。

クラスパス

cmdを実行ではjava -help、あなたは(また、他のオプションの説明を含む)、クラスパスこのオプションの公式の説明を見ることができます

このコマンドは、するために使用されるクラスファイルの検索、私たちが望むものです。

形式は次のとおりです。

java -classpath 类路径 类名

クラスが有する、複数の経路を有することができ、;離間、必要ではない;

その後、Eの指示に従ってください:\ディレクトリに、私はクラスパスのコマンドを追加します。

java -classpath E:\aaa A

成功を実行しています!

我々は、ビューのクラスパスの第二の部分を組み合わせた今回我々は、現在のディレクトリのjavaコマンドで実行し、なぜ、あなたはクラスファイルを実行するために見ることができますが問題ありません。我々はjavaコマンドを実行すると、実際には、実行パラメータとして、現在のディレクトリに参加しますので。

それは私たちが実行しているjava Aコマンドを、実際に実行java -classpath . Aされ、.現在のディレクトリを表します。

パッケージ

上記、クラスがどのパッケージに属していない、実際に私たちは多くの小さなグリッドに分け、大きなキャビネットのように、パッケージ内のクラスを置く、私たちを見つけるのは簡単だけの単純なクラスです。一般的に、パッケージ名はに似逆ドメイン名の会社、で書かれているcom.icecoffee本。

多段Javaパッケージのようなファイルシステムにおけるマルチレベルのフォルダ、の形態であるcom.icecoffee.testファイルシステムに対応しているcom\icecoffee\testようなマルチレベルのフォルダ。ケースということを、私たちが実行したい場合は、疑問に始めましょうcom.icecoffee.testパッケージの下のクラスBを、私のコマンドは以下のようでなければならないこと、?下図のように。

  1. B.java \ BBB \ディレクトリの作成:Eに

    B.java

    package com.icecoffee.test;
    
    public class B {
    	public static void main(String[] args) {
    		System.out.println("BBB");
    	}
    }
    
  2. コンパイルB.java

    javac B.java
    

    Eの場合:\ BBB \ B.classファイルの下に作成したディレクトリ、私はJD-GUIによりB.classファイルを参照して、この時間は、ファイルにパッケージ情報を見つけるのソースコードではありません

  3. COM \ icecoffee \テストマルチレベルディレクトリ\ BBB \ディレクトリを作成し、テストB.classディレクトリにファイルを移動:Eに

    このコード行を持つことになり、対応するパッケージの下に置く理由を再びJD-GUI B.classファイルで閲覧今回は、そこにコードのパッケージ情報の行を見つけ、私は現時点では分かりません。

  4. B.classを実行するための最初の試み

    java -classpath E:\bbb B
    

    エラー

  5. B.classを実行するための第二の試み

    java -classpath E:\bbb\com\icecoffee\test B
    

    エラー

  6. コマンドの正しい操作B.class

    java -classpath E:\bbb com.icecoffee.test.B
    

4,5,6三つのコマンドのこのコントラストは、我々はクラスがパッケージに実行するようにする場合、正しいコマンドを追加する必要の前にパラメータクラスパス、クラス名と同じディレクトリにパッケージの最外層であると結論付けることができますすなわち、クラス名は方法の完全修飾クラス名に書き込まれるマルチレベルパッケージ。この1で、私は実行不可能であることが証明され、パッケージに含まれている5マルチレベル・パラメータがクラスパスに実行されたステップにしてみてください。

びん

ジャーパッケージは圧縮パッケージに複数のクラスファイルで、.jarファイルは圧縮ソフトウェアによって表示するために開くことができます。

よるCMDでjar -helpjarコマンドの使用法関連を見ることができます

今、私はジャーパッケージにB.classファイルの第三パッケージの一部です

Eの場合:\ BBB \ディレクトリに、実行します。

jar cvf B.jar com

COMが属するB.classいるので、包装されるディレクトリを表しcom.icecoffee.test、このパッケージパッケージの最外層がCOM、jarコマンドは、ディレクトリを再帰的になります

圧縮の成功の後、現在のディレクトリにB.jar圧縮ファイルを生成します。

また、直接のjarパッケージB.classを実行することができます

java -classpath E:\bbb\B.jar com.icecoffee.test.B

成功を実行しています!

また、あなたが知っている必要がありjavaコマンドの実装では、クラスパスのパラメータに加え、JVMはJRE \ libに行くと、私たちはJDKをインポートする理由であるJRE \ libに\ extに両方のデフォルトのディレクトリ検索カテゴリ、ということです加えて、java.langクラスのパッケージの外側原因で実行するようにコンパイルすることができます。

たとえば、java.util.Dateこのクラスは、このパッケージにrt.jarの下のjre \ libディレクトリに位置しています

なぜ他にあるjava.lang袋の外?パッケージ内のクラスは非常に一般的ですので、ほぼすべてのカスタムクラスは、例えば、カテゴリにこのパッケージを使用する必要がありますStringそのため、このパッケージ内のすべてのクラスは、暗黙的にjavaファイルを経由せずに、導入されているimport明示的にインポート。

おすすめ

転載: www.cnblogs.com/cailinfeng/p/12609640.html