Java ClassNotFoundException

WBOY
WBOYオリジナル
2024-08-30 16:14:44873ブラウズ

その名のとおり、ClassNotFoundException は、Java 仮想マシン (JVM) によって特定のクラスをロードしようとすると Java で発生します。要求されたクラスが指定したクラスのパスに見つかりません。これは、指定したクラスのパスが壊れていることを意味します。これは Java の世界ではよくある問題です。したがって、Java では ClassNotFoundException もよく発生します。この問題は Java の初心者にとって非常に混乱するものであり、ClassNotFoundException をキャッチするか、呼び出し元にスローする必要があります。 ClassNotFoundException はチェック例外です。

広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

Java での ClassNotFoundException の構文は次のとおりです:

java.lang.ClassNotFoundException:Class_name at location

Java での ClassNotFoundException の仕組み

  • アプリケーションがクラスをロードしようとしているときに、クラスローダーが指定されたクラスのパスでクラスを見つけられない場合、つまり Java で ClassNotFoundException が発生する場合。
  • 指定されたクラスのパスに見つからないクラスの文字列名をパラメータとして渡しながら、クラスをロードするために Class.forName および ClassLoader.loadClass を使用することは、java.lang の一般的な原因の 1 つです。 Java の .ClassNotFoundException。
  • Java の ClassNotFoundException はチェック例外であるため、キャッチするか呼び出し元にスローする必要があります。
  • クラスは、クラスローダーを使用して間接的にロードされています。その結果、Java では実行時に ClassNotFoundException が発生します。 Java コンパイラーは、実行時に指定されたクラスのパスにクラスが存在するかどうかを知る方法がありません。
  • Class.forName を使用して JDBC ドライバーをロードしようとし、クラスのパスに jar ファイルを追加しないことは、Java における ClassNotFoundException の一般的な例の 1 つです。
  • Java での ClassNotFoundException を示す以下のプログラムを考えてみましょう:
//a class called program is defined
public class Program
{
//main method is called
public static void main(String args[])
{
//class not found exception is defined using try and catch block
try
{
// the forname method in class class looks for the mentioned class
Class.forName("The Class do not Exist");
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
}

上記のプログラムの出力は、以下のスナップショットに示されているとおりです。

Java ClassNotFoundException

上記のプログラムでは、Programというクラスが定義されています。次に、main メソッドが呼び出されます。次に、try and catch ブロックを使用してクラスが見つからない例外を定義します。クラスは存在しません。クラスローダーが見つけようとしているjavaクラスがあり、クラス内のfornameメソッドが言及されたクラスを探しますが、見つかりません。したがって、ClassNotFoundException がスローされます。プログラムの出力は、上のスナップショットに示されているとおりです。

コンストラクター

Java には ClassNotFoundException のコンストラクターがいくつかあります。それらは次のとおりです:

  • ClassNotFoundException(): スタックの現在のトレースを含む新しい ClassNotFoundException が構築されます。
  • ClassNotFoundException(String): 新しい ClassNotFoundException が構築されます。これには、指定されたスタックの現在のトレースとメッセージの詳細が含まれます。
  • ClassNotFoundException(IntPtr, JniHandleOwnership): JNI オブジェクトの作成中、その表現を管理しながら、このコンストラクターが使用され、ランタイムがそれを呼び出します。
  • ClassNotFoundException(String, Throwable): 新しい ClassNotFoundException が構築されます。これには、スタックの現在のトレースと、指定されたメッセージの詳細、およびクラスをロードしようとしたときに発生する例外が含まれます。 .

Java ClassNotFoundException の例

以下に挙げる例を次に示します:

例 #1

ClassNotFoundException を示す Java プログラム:

コード:

//a class called exceptiondemo is defined
public class Exceptiondemo
{
//a string variable is defined
private static final String DRIVE_CLASS = "com.mysql.jdbc.Driver";
//main method is called including the exception
public static void main(String[]  args) throws Exception
{
System.out.println("MySQL JDBC driver loading attempt");
//the forname method in class class looks for the mentioned class
Class.forName(DRIVE_CLASS);
}
}

上記のプログラムの出力は、以下のスナップショットに示されているとおりです。

Java ClassNotFoundException

上記のプログラムでは、Exception Demonというクラスが定義されています。次に、main メソッドが呼び出されます。次に、JDBC ドライバーのパスが割り当てられる文字列変数が定義されます。次に main メソッドが呼び出され、例外がスローされます。クラス ローダーは、指定されたクラスの JDBC ドライバー パスを見つけようとしますが、クラス内の forname メソッドは、指定されたクラスを探しますが、見つかりません。したがって、ClassNotFoundException がスローされます。プログラムの出力は、上のスナップショットに示されているとおりです。

例 #2

ClassNotFoundException(String) をデモする Java プログラム

コード:

//a class called check is defined
public class Check
{
//main method is called
public static void main(String args[])
{
//class not found exception is defined using try catch block
try
{
//the forname method in class class looks for the mentioned class
Class.forName("Demonstrating class not found exception");
}
catch(ClassNotFoundException e)
{
//the string specified along with the class not found exception is displayed.
System.out.println("There is no class as specified in the path " + e);
}
}
}

上記のプログラムの出力は、以下のスナップショットに示されているとおりです。

Java ClassNotFoundException

上記のプログラムでは、checkというクラスが定義されています。次に、main メソッドが呼び出されます。次に、main メソッドが呼び出されます。次に、try および catch ブロックを使用してクラスが見つからない例外を定義します。  次に、クラスの forename メソッドは、指定されたクラスを探しますが、見つかりません。したがって、ClassNotFoundException がスローされ、クラスが見つからない例外とともに詳細メッセージとして指定された文字列が表示されます。プログラムの出力は、上のスナップショットに示されているとおりです。

ClassNotFoundException を回避するには?

ClassNotFoundException を回避する手順:

  • jar ファイルが存在する問題の原因となっているクラスのファイルを見つける必要があります。
  • クラスのパスまたはクラスパスがその jar で構成されているかどうかを確認する必要があります。 jar がクラスパスまたはクラスのパスに存在しない場合は、クラスをクラスまたはクラスパスのパスに追加する必要があります。
  • クラスがクラスまたはクラスパス パスに存在する場合は、クラスパスまたはクラスのパス、または jar ファイルで指定されたパスがオーバーライドされているか、起動に使用されるスクリプトが使用されている可能性があります。アプリケーション。この問題を解決するには、アプリケーションで使用されているクラスの正確なパスを見つける必要があります。

結論

このチュートリアルでは、定義を通じて Java の Class Not Found Exception の概念、Java の Class Not Found Exception の構文、Java の Class Not Found Exception の動作、および例とその出力を通じてそのコンストラクターを理解します。

以上がJava ClassNotFoundExceptionの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。