Javaの例外( Execption)の階層と種類について




例外とは

Javaで例外処理をするのに色々調べてて、そもそも例外について詳しく知らなかったので調べてみました。

Java言語の例外とはプログラムの誤りを検知し、適切なエラー処理を行うための機構です。

Java言語プログラミング言語レッスン下

具体的にはこんな時に発生します。

  • 配列の長さを超えた添え字で要素を取得する
  • 存在しないファイルを開く
  • オブジェクトを作りすぎてメモリが足りなくなる

このような状況に対して適切な処理を行うのを例外処理と言いますね。ではこの例外にはどんな種類があるのでしょうか?

例外の階層と種類

例外のクラス構造はこのようになっています。Objectは全てのクラスのルートにあるクラスですね。

Throwableはthrow文で投げることができ、catch節で例外をキャッチすることができます。Throwableは大きく2つに分けることができ、それがErrorとExceptionになります。

Object
  |_Throwable
      |_Error
      |_Exception
          |_RuntimeException
          |_それ以外のException

Error

Errorは動作を継続するのは期待できないときに投げられるクラスです。例えば、メモリが足りなくなったり、スタックオーバーフローを起こしたりしたときに投げられます。

Exception

Exceptionは正しく例外処理を行うことで、動作を継続することが期待できるときに投げられるクラスです。例えば、配列の範囲を超えてアクセスしようとしたときや、存在しないファイルを開こうとしたときに投げられます。

ExceptionはさらにRuntimeExceptionとそれ以外に分けることができます。

RuntimeException

RuntimeExceptionは実行中に発生し、コンパイラによって前もってチェックできない例外を表すクラスのことです。

例えば、配列の範囲を超えてアクセスしたり、整数で0の割り算を行ったり、数値にできない文字列を数値に変換しようとしたりした場合に発生します。

RuntimeException以外のException

これはコンパイルによって前もってチェックできる例外のクラスのことです。例えば、ファイルを開こうとしたが見つからなかったり、開こうとしたら最後までたどり着いたなどの場合です。

チェックされる例外とされない例外

ある例外がコンパイラにチェックされる例外(checked exception)かどうかは非常に重要になります。

  • チェックされない例外→ErrorとRuntimeException
  • チェックされる例外→RuntimeException以外のException

チェックされる例外

チェックされる例外はコンパイラがコンパイル時にチェックする例外で、RuntimeException以外のExceptionになります。例えばあるメソッドの中で

throw new IOexception();

としている場合、下記のいずれかを実装しなければいけません。

  • メソッド内のcatch節でその例外をキャッチする
  • メソッド内のthrows節で例外を投げることを宣言する

チェックされない例外

コンパイラでチェックされない例外をわかりやすく言うと、「いつ、どこで発生してもおかしくない例外」のことでコンパイラでいちいちチェックしていられない例外ということです。

なので配列の範囲を超えてアクセスしたり、メモリ不足で発生する例外はチェックされない例外となるのです。

まとめ

例外を詳しく調べるだけでかなり勉強になりました。

ちょっとしたことだけどしっかり理解しておくことで例外処理の仕方だったり、Exceptionの意味が今後理解しやすくなったかなと思います。

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です