Java では、クラスが存在するときに ClassNotFoundException が発生するのはなぜですか?

王林
リリース: 2023-09-11 18:21:04
転載
1026 人が閲覧しました

Java では、クラスが存在するときに ClassNotFoundException が発生するのはなぜですか?

クラスをロードしようとするたびに、クラスローダーが指定されたパスでクラスを見つけられない場合、ClassNotFoundException が生成されます。

これは、Class という名前のクラスの forName() メソッドまたはクラスの loadClass()## を使用して Java プログラムを実行するときに発生する可能性があります。 ClassLoader クラス # クラスを明示的にロードするメソッド。これら 2 つのクラスは、クラス名を表す文字列値を受け入れ、指定されたクラスを読み込みます。

これらのメソッドにクラス名を渡すときは、-

    これらのメソッドに渡されるクラス名が正確であることを確認する必要があります。

  • 指定されたクラス (パッケージとともに) は現在のディレクトリに存在するか、そのパスが環境変数 classpath にリストされている必要があります。

Sample という名前のファイルをディレクトリに作成するとします。 D:// を指定し、次のようにコンパイルします。 -

package myPackage.example;
public class Sample {
   static {
      System.out.println("The class named Sample loaded successfully.........");
   }
}
ログイン後にコピー

Compile

D:\>javac -d . Sample.java
ログイン後にコピー

これにより、現在のディレクトリ myPackage.example にパッケージが作成され、その中に ## がビルドされます

.class #Sample クラスの ファイル。したがって、このクラスをロードするときは、同じディレクトリに配置し、絶対クラス名を Class.forName() または loadClass()Example# に渡す必要があります。 ## ライブ デモンストレーション

public class ClassNotFoundExample {
   public static void main(String args[]) {
      try {
         Class.forName("myPackage.exampl.Sample");
      }catch (ClassNotFoundException ex) {
         ex.printStackTrace();
      }
   }
}
ログイン後にコピー

例外

上記のプログラムの実行中に、パッケージ名のスペルミスにより、次の例外が発生します。

D:\>java ClassNotFoundExample
java.lang.ClassNotFoundException: myPackage.exampl.Sample
   at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
   at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
   at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
   at java.base/java.lang.Class.forName0(Native Method)
   at java.base/java.lang.Class.forName(Unknown Source)
   at ClassNotFoundExample.main(ClassNotFoundExample.java:4)
ログイン後にコピー

別のディレクトリから特定のクラスにアクセスしようとしている場合は、クラスパスを設定する必要があります -

次のコンテンツを含むフォルダー (最も外側のパッケージ) .class ドキュメント。
  • または、

    クラスを含む jar ファイル。
  • スペルの問題を修正し、E:// ディレクトリ内の Java ファイルからクラスをロードしようとすると仮定します。
Example

Liveデモンストレーション

public class ClassNotFoundExample {
   public static void main(String args[]) {
      try {
         Class.forName("myPackage.example.Sample");
      }catch (ClassNotFoundException ex) {
         ex.printStackTrace();
      }
   }
}
ログイン後にコピー

Exception

指定されたクラスの .class ファイル (またはそれを含む jar ファイル) を含むパッケージが現在のディレクトリにも存在しないため、同じ例外が発生します。パスリスト環境変数classpath。

E:\>java ClassNotFoundExample
java.lang.ClassNotFoundException: myPackage.example.Sample
   at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
   at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
   at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
   at java.base/java.lang.Class.forName0(Native Method)
   at java.base/java.lang.Class.forName(Unknown Source)
   at ClassNotFoundExample.main(ClassNotFoundExample.java:4)
ログイン後にコピー
現在のシナリオでは、クラスパスを、必要なクラスのパッケージを含むディレクトリ (つまり、「

D://

」) に設定し、上記の Java プログラムを実行して機能させます。

えええええ

以上がJava では、クラスが存在するときに ClassNotFoundException が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!