Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのgetCause()メソッドとは?例外の原因を取得する方法をわかりやすく解説

JavaのgetCause()メソッドは、Throwableクラスに定義されたメソッドで、例外の原因(cause)を返します。原因が設定されていない場合や不明な場合はnullを返します。

このメソッドは引数を受け取らず、例外をスローすることもありません。戻り値となる原因は、コンストラクタで指定されたもの、またはinitCause()メソッドによって設定されたものです。

構文

public Throwable getCause()

コード例

public class GetCauseMethodTest {
    public static void main(String[] args) throws Exception {
        try {
            myException();
        } catch(Exception e) {
            System.out.println("Cause = " + e.getCause());
        }
    }

    public static void myException() throws Exception {
        int arr[] = {1, 3, 5};
        try {
            System.out.println(arr[8]);
        } catch(ArrayIndexOutOfBoundsException aiobe) {
            Exception e = new Exception();
            e.initCause(aiobe); // getCause()が返す原因を設定
            throw e; // main()のcatchブロックで捕捉される例外をスロー
        }
    }
}

実行結果

Cause = java.lang.ArrayIndexOutOfBoundsException: 8

コードの解説

配列arrは要素数が3ですが、存在しないインデックス8にアクセスしようとしたため、ArrayIndexOutOfBoundsExceptionが発生します。

catchブロック内では、新しいExceptionオブジェクトを生成し、initCause()メソッドを使って元の例外(aiobe)を原因として設定してからスローしています。原因の設定は必ずスローの前に行う必要がある点に注意しましょう。

main()メソッドのcatchブロックでgetCause()を呼び出すことで、実際に発生した例外の原因を確認できます。

getCause()メソッドの主な特徴

  • 引数を受け取らない
  • 例外をスローしない
  • 原因が不明・未設定の場合はnullを返す
  • コンストラクタまたはinitCause()で設定された原因を返す

このようにgetCause()メソッドは、例外チェーン(連鎖する例外)をたどって根本的なエラー原因を特定する際に非常に有用です。複雑なアプリケーションのデバッグやログ解析において、例外の発生源を正確に把握するためにぜひ活用してください。

  1. Java 9のdestroyForcibly()メソッドとは?プロセスを強制終了する方法を解説

    destroyForcibly() メソッドは、実行中のプロセスを強制的に終了(キル)するために使用されます。このメソッドは、プロセスが正常に終了しない場合や、フリーズ(応答停止)してしまった場合に特に役立ちます。 例えば、destroyForcibly() を呼び出した後でも isAlive() メソッドが true を返すことがあります。これは、OSレベルでの終了処理が完了するまでに時間差があるためです。また、destroyForcibly() は終了要求が正常に受け付けられた場合は true を返し、そうでない場合は false を返します。 構文 boolean destroyForc

  2. JavaにおけるCursorクラスの役割とは?マウスカーソル制御の基本を解説

    JavaのCursorクラスとはCursorクラスは、Objectクラスのサブクラスであり、画面上のポイント(指し示す位置)やインジケーター(表示標識)として定義されます。ユーザーがマウスを使ってシステムへの入力を選択・操作する際に、その位置を視覚的に示す重要な役割を担っています。GUIアプリケーションでは、状況に応じてカーソルの形状を変えることで、ユーザーに対して直感的なフィードバックを提供できます。例えば、処理中であることを伝える砂時計型のカーソルや、クリック可能な要素を示す手型のカーソルなどが代表的な例です。利用可能なカーソルの種類Cursorクラスには、あらかじめ定義されたさまざまなカ