エラー:検索またはメインクラスをロードできません。
まず、例が与えられます。
-
で
E:\aaa
作成A.javaディレクトリA.java
public class A { public static void main(String[] args) { System.out.println("AAA"); } }
-
cmdでコンパイルA.java
javac E:\aaa\A.java
AAAの下の世代A.class \ディレクトリ:Eで、このとき
-
(:\ AAAディレクトリEで)cmdを実行することでA.class
java A
今回はそれが正常に実行することができます
-
(:\ディレクトリ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を、私のコマンドは以下のようでなければならないこと、?下図のように。
-
B.java \ BBB \ディレクトリの作成:Eに
B.java
package com.icecoffee.test; public class B { public static void main(String[] args) { System.out.println("BBB"); } }
-
コンパイルB.java
javac B.java
Eの場合:\ BBB \ B.classファイルの下に作成したディレクトリ、私はJD-GUIによりB.classファイルを参照して、この時間は、ファイルにパッケージ情報を見つけるのソースコードではありません
-
COM \ icecoffee \テストマルチレベルディレクトリ\ BBB \ディレクトリを作成し、テストB.classディレクトリにファイルを移動:Eに
このコード行を持つことになり、対応するパッケージの下に置く理由を再びJD-GUI B.classファイルで閲覧今回は、そこにコードのパッケージ情報の行を見つけ、私は現時点では分かりません。
-
B.classを実行するための最初の試み
java -classpath E:\bbb B
エラー
-
B.classを実行するための第二の試み
java -classpath E:\bbb\com\icecoffee\test B
エラー
-
コマンドの正しい操作B.class
java -classpath E:\bbb com.icecoffee.test.B
4,5,6三つのコマンドのこのコントラストは、我々はクラスがパッケージに実行するようにする場合、正しいコマンドを追加する必要の前にパラメータクラスパス、クラス名と同じディレクトリにパッケージの最外層であると結論付けることができますすなわち、クラス名は方法の完全修飾クラス名に書き込まれるマルチレベルパッケージ。この1で、私は実行不可能であることが証明され、パッケージに含まれている5マルチレベル・パラメータがクラスパスに実行されたステップにしてみてください。
びん
ジャーパッケージは圧縮パッケージに複数のクラスファイルで、.jarファイルは圧縮ソフトウェアによって表示するために開くことができます。
よるCMDでjar -help
jarコマンドの使用法関連を見ることができます
今、私はジャーパッケージに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
明示的にインポート。