ホームページ  >  記事  >  Java  >  Java では、クラスが存在するときに ClassNotFoundException が発生するのはなぜですか?

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

王林
王林転載
2023-09-11 18:21:041047ブラウズ

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# に渡す必要があります。 p>## ライブ デモンストレーション

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 までご連絡ください。