Previous | Next | Trail Map | Writing Java Programs | 例外を使用したエラー処理


Throwable クラスとそのサブクラス

前のページで学習したように、Throwable クラスから派生するオブジェクトだけをあげることができる。 これには、間接の子孫(Throwable クラスの子や孫から派生するオブジェクト)と同様に直接の子孫(Throwable クラスから直接派生するオブジェクト)が含まれる。

次の図では、Throwable クラスのクラス階層とその最も重要なサブクラスを説明する。

図からわかるように、Throwable が Error と Exception の2つの直接の子孫を持っている。

Errorクラス

動的クリンクの失敗や他の仮想マシンでの「ハード的な」失敗が発生すると、仮想マシンは Error をあげる。 通常の Java プログラムは Error をキャッチするべきではない。 さらに、通常の Java プログラムでは Error をあげることさえほとんどない。

Exception クラス

たいていのプログラムが、 Exception クラスから派生するオブジェクトをあげてキャッチする。 Exception クラスは、プログラムで問題が発生した場合その問題が重大なシステム的な問題ではないことを表す。 作成するたいていのプログラムは Exception をあげてキャッチする。

Exception クラスは Java パッケージで定義された多くの子孫を持っている。 これらの子孫は発生する種々の例外の型を示す。 たとえば、 IllegalAccessException は特定のメソッドが見つからないことを知らせ、NegativeArraySizeException はプログラムが負のサイズで配列を作成しようと試みたことを表す。

RuntimeException という Exception のサブクラスは、 Java 言語では特別な意味を持っている。

RuntimeException クラス

RuntimeException クラスは 例外が(runtime時に)Java 仮想マシン内で発生した例外であることを表す。 ランタイム例外の例が NullPointerException である。この例外は、メソッドが null 参照を通してオブジェクトのメンバをアクセスしようとする時に発生する。 NullPointerException は、プログラムがオブジェクトへの参照を非参照しようと試みることによりどこでも発生させることができる。 しばしば例外を確認するコストは、それをキャッチすることの利益よりも重要である。

ランタイム例外はいたるとろこにあり,(および読解不能な実り多いソースやメンテナンス不可能なコード)常にこの例外をキャッチあるいは指定しようとするのは実りない努力である(そして,結果は読解不能なメンテナンス不能な実り多いコードとなる)。したがって、コンパイラは,ランタイム例外については、例外があげられていなくとも、あるいは、指定されていなくともエラーとはしない。。

Java パッケージはいくつかの RuntimeException クラスを定義している。 他の例外と全く同じようにこれらの例外をキャッチすることができる。 しかし、メソッドが RuntimeExceptions をあげることを指定する必要はない。 さらに、独自の RuntimeException サブクラスを作成することができる。 ランタイム例外 − 論争 では、いつどのようにランタイム例外を使用するべきかについて徹底的に検討する。


Previous | Next | Trail Map | Writing Java Programs | 例外を使用したエラー処理