Java スロー可能 VS 例外クラス
この記事では、Java で Throwable
クラスと Exception
クラスをいつ使用するかを説明します。 どちらのクラスにも、エラーと例外を処理するコンストラクタとメソッドがあります。
最初に、両方のクラスの Throwable
と Exception
の紹介を見て、その後、両者の違いを学びます。
Java の Throwable
クラスの紹介
java.lang
クラスの階層では、Throwable
クラスは Error
および Exception
クラスの親またはスーパークラスです。 これは、Error
と Exception
が Java の Throwable
クラスによって継承されることを意味します。
Throwable
クラスは、スタック トレース エラーまたはコンパイル時または実行時の例外のいずれかで、Java 仮想マシンによって生成されたすべてのエラーと例外をキャッチできると結論付けています。
さらに、Throwable
クラスは、それが定義されている java.lang
ライブラリで Serializable
インターフェイスを実装します。
ユーザーは、以下の Throwable
クラスの定義を見ることができます。
public class Throwable extends Object implements Serializable
上記のクラス定義では、Throwable
クラスが Object
クラスを継承し、Serializable
インターフェイスを実装していることがわかります。
Throwable
の構文:
try {
// some code
} catch (Throwable e) {
// handle errors or exceptions
}
Throwable
クラスには、以下で説明するオーバーロードされたコンストラクターが含まれています。
コンストラクター
Throwable() |
このコンストラクターは、デフォルトのエラー メッセージで Throwable の新しいインスタンスを作成します。 |
Throwable(String errorMessage) |
このコンストラクターは、errorMessage メッセージで Throwable の新しいインスタンスを作成します。 |
Throwable(String errorMessage, Throwable errorCause) |
このコンストラクターは、エラー メッセージの原因も取得し、errorMessage と errorCause を使用して Throwable の新しいインスタンスを作成します。 |
≪Throwable(Throwable errorCause)≫ | このコンストラクターは、パラメーターとして渡された特定の原因で Throwable の新しいインスタンスを作成します。 |
メソッド
ここまで、Throwable
クラスのいくつかのメソッドについて説明してきました。
toString() |
エラーの説明を文字列形式で返します。 |
getMessage() |
エラーメッセージを文字列形式で返します。 |
getCause() |
Throwable の現在のインスタンスの原因を返します。 |
getLocalizedMessage() |
Throwable のローカライズされた説明を返します。 |
getStackTrace() |
スタック トレースに関する情報を提供します。 |
printStackTrace() |
Throwable の現在のインスタンスを出力します。 |
setStackTrace(StackTraceElement[] stackTrace) |
getStackTrace() メソッドによって返されるスタック トレースの要素を設定できます。 |
initCause(スロー可能な原因) |
これにより、ユーザーは現在の Throwable の原因を初期化できます。 |
エラー
Errors
クラスには、プログラムの実行を停止するエラーが含まれます。
StackOverflowError |
スタックまたはヒープのオーバーフローが発生した場合に発生します。 |
AssertionError |
アサーションの失敗が原因で発生します。 |
VirtualMachineError |
Java 仮想マシンのすべてのエラーをキャッシュします。 |
LinkageError |
リンケージの問題が原因で発生します。 |
OutOfMemoryError |
これは、デバイスのメモリ不足または JVM のメモリ不足が原因で発生します。 |
Java の Exception
クラスの紹介
Java では、例外は実行時またはコンパイル時に発生する望ましくないイベントです。 例外は、チェック済み例外と呼ばれるコンパイル時にキャッチでき、非チェック例外と呼ばれる実行時にのみキャッチできます。
Throwable
の構文:
try {
// some code
} catch (Exception e) {
// handle Exceptions only
}
ここでは、Java でいくつかのタイプの例外を定義しました。
RuntimeException |
非チェック例外のすべてのクラスはそれを継承します。 |
NullPointerException |
null または未定義の値が原因で発生します。 |
ArithmeticException |
算術演算の失敗により発生します。 |
ArrayIndexOutOfBoundsException |
その長さよりも大きい配列インデックスにアクセスしようとすると発生します。 |
NoSuchMethodException |
メソッドが定義されていない場合に発生します。 |
IOException |
入出力操作の失敗により発生します。 |
ClassNotFoundException |
クラスが定義されていない場合に発生します。 |
SQLException |
データベース操作の失敗がこの例外の原因です。 |
プログラマーは、Java の Exception
クラスを継承して例外を定義することもできます。
Throwable
または Exception
のどちらのクラスを使用する必要があるか
Throwable
クラスと Exception
クラスの構文を見ると、try-catch
ブロックで両方を使用しているため、一見似ているように見えます。
Throwable
クラスのインスタンスは、Throwable
のサブクラスであるため、エラーと例外をキャッチできますが、Exceptions
のインスタンスは、プログラムで発生した例外のみをキャッチできます。
通常の Java アプリケーションでは、まれに LinkageError
、VirtualMachineError
、OutOfMemoryError
などのエラーが発生します。 主にユーザーのミスで例外が発生します。
そのため、Throwable
クラスではなく、Exception
クラスのインスタンスを使用することをお勧めします。