例外処理
以下は、例外オブジェクトの階層構造です。
Object
┗Throwable
┣Error
┃┗エラー例外
┗Exception
┣RuntimeException
┃┗実行時例外(非検査例外)
┗検査例外
┗Throwable
┣Error
┃┗エラー例外
┗Exception
┣RuntimeException
┃┗実行時例外(非検査例外)
┗検査例外
例外は、大きく(1)エラー例外、(2)実行時例外、(3)検査例外に分類できます。エラー例外は、仮想マシンレベルの障害(VirtualMachineError)など、アプリケーションで処理できない例外を表します。
実行時例外は、オブジェクトがNullである(NullPointerException)、配列のインデックス番号が範囲外(IndexOutOfBoundsException)など、いわゆるアプリケーションのバグであり、この例外が発生するような場合はコードそのものを修正すべきです。
そして、検査例外が狭義の例外です。あるはずのファイルが存在しない(FileNotFoundException)、データベースにアクセスできなかった(SQLException)など、アプリの責任では回避できない問題が、ここに属します。Javaでは、アプリ側で検査例外を処理することが義務付けられています(=処理されなかった検査例外はコンパイル時にエラーとなります)。