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()メソッドは、例外チェーン(連鎖する例外)をたどって根本的なエラー原因を特定する際に非常に有用です。複雑なアプリケーションのデバッグやログ解析において、例外の発生源を正確に把握するためにぜひ活用してください。
-
Java 9のdestroyForcibly()メソッドとは?プロセスを強制終了する方法を解説
destroyForcibly() メソッドは、実行中のプロセスを強制的に終了(キル)するために使用されます。このメソッドは、プロセスが正常に終了しない場合や、フリーズ(応答停止)してしまった場合に特に役立ちます。 例えば、destroyForcibly() を呼び出した後でも isAlive() メソッドが true を返すことがあります。これは、OSレベルでの終了処理が完了するまでに時間差があるためです。また、destroyForcibly() は終了要求が正常に受け付けられた場合は true を返し、そうでない場合は false を返します。 構文 boolean destroyForc
-
JavaにおけるCursorクラスの役割とは?マウスカーソル制御の基本を解説
JavaのCursorクラスとはCursorクラスは、Objectクラスのサブクラスであり、画面上のポイント(指し示す位置)やインジケーター(表示標識)として定義されます。ユーザーがマウスを使ってシステムへの入力を選択・操作する際に、その位置を視覚的に示す重要な役割を担っています。GUIアプリケーションでは、状況に応じてカーソルの形状を変えることで、ユーザーに対して直感的なフィードバックを提供できます。例えば、処理中であることを伝える砂時計型のカーソルや、クリック可能な要素を示す手型のカーソルなどが代表的な例です。利用可能なカーソルの種類Cursorクラスには、あらかじめ定義されたさまざまなカ