HOWTO · Java

Java スロー可能 VS 例外クラス

この記事では、Java の Throwable クラスと Exception クラスの違いを学びます。

このページの内容

この記事では、Java で Throwable クラスと Exception クラスをいつ使用するかを説明します。 どちらのクラスにも、エラーと例外を処理するコンストラクタとメソッドがあります。

最初に、両方のクラスの ThrowableException の紹介を見て、その後、両者の違いを学びます。

Java の Throwable クラスの紹介

java.lang クラスの階層では、Throwable クラスは Error および Exception クラスの親またはスーパークラスです。 これは、ErrorException が 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) このコンストラクターは、エラー メッセージの原因も取得し、errorMessageerrorCause を使用して 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 アプリケーションでは、まれに LinkageErrorVirtualMachineErrorOutOfMemoryError などのエラーが発生します。 主にユーザーのミスで例外が発生します。

そのため、Throwable クラスではなく、Exception クラスのインスタンスを使用することをお勧めします。