以下は、例外オブジェクトの階層構造です。
Object
┗Throwable
┣Error
┃┗エラー例外
┗Exception
┣RuntimeException
┃┗実行時例外(非検査例外)
┗検査例外
例外は、大きく(1)エラー例外、(2)実行時例外、(3)検査例外に分類できます。エラー例外は、仮想マシンレベルの障害(VirtualMachineError)など、アプリケーションで処理できない例外を表します。
実行時例外は、オブジェクトがNullである(NullPointerException)、配列のインデックス番号が範囲外(IndexOutOfBoundsException)など、いわゆるアプリケーションのバグであり、この例外が発生するような場合はコードそのものを修正すべきです。
そして、検査例外が狭義の例外です。あるはずのファイルが存在しない(FileNotFoundException)、データベースにアクセスできなかった(SQLException)など、アプリの責任では回避できない問題が、ここに属します。Javaでは、アプリ側で検査例外を処理することが義務付けられています(=処理されなかった検査例外はコンパイル時にエラーとなります)。
監修
山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。