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 クラスのインスタンスを使用することをお勧めします。
