頭脳一式

人の記憶なんて曖昧なもの。すべての情報を頭に記憶するなんてナンセンス。困ったらここに来ればいいじゃん?

【Java SE8 Silver】エラーと検査例外と非検査例外

種類 意味
エラー
erroer
プログラムからは対処のしようがない事態を指す。
(実行マシンのメモリが不足していたり、ディスクの読み込み書き込み権限が無かったり…)
エラーは例外処理をすることを「求められていない」だけであって、catchして処理することが可能。
検査例外
Exception
例外処理を記述したかどうかをコンパイラ検査する例外を指す。
非検査例外
RuntimeException
及びそのサブクラス
例外処理を記述したかどうかをコンパイラ検査しない例外を指す。

Exceptionクラスのサブクラスは、RuntimeExceptionとそのサブクラスを除いてすべて検査例外である。
そのため、Exceptionクラスを継承している例外クラスは、
try-catchしているかthrows句で宣言しているかのどちらかを強制される。
一方、ExceptionクラスのサブクラスであってもRuntimeExceptionとそのサブクラスは
非検査例外として扱われる。そのため、try-catchしているかthrows句で宣言しているかを強制されない。
(宣言してもしてなくても可)

種類 意味
ArrayIndexOutOfBoundsException 配列の要素外にアクセスしたときに発生する表す例外クラス。
IndexOutOfBoundsException 存在しない要素を取り出そうとしてたときに発生する例外クラス。
StringIndexOfBoundsException 文字列の範囲外アクセスを表す例外クラス。
ClassCastException 継承関係や実現関係に無いクラスにキャストしようとしたとき発生する例外クラス。
IllegalArgumentException 利用される側のオブジェクトが不正な引数を渡されたことを、利用する側のオブジェクトに通知するための例外。
IllegalStateException 利用される側のオブジェクトが、まだ利用するための準備が終わっていないなどの理由でスローする例外。
NumberFormatException 数値に変換しようとして失敗したときにスローされる例外。
ExceptionInInitializerError staticイニシャライザを処理している間にトラブルが発生したときに強制終了させるためのエラー。
StackOverflowError 再帰処理をしているとスタック領域が足りなくなってくる。JVMが足りないことを検知したときに発生するエラー。
NoClassDefFoundError JVMが実行対象のクラスファイルを発見できなかったときにスローする例外。
OutOfMemoryError ヒープ領域が足りなくなったときにスローする例外。
VirtualMachineError 「OutOfMemoryError」や「StackOverflowErro」の親クラス。
JVMが壊れているか、または動作を継続するのに必要なリソースが足りなくなったときにスローする例外。
InternalErro 「VirtualMachineError」のサブクラス。
JVM内で何らかの内部エラーが発生したことを指す。
StringIndexOfBoundsException

実行したとき、下記のコードのように文字列の範囲外(存在しないINDEX)にアクセスすると発生するError。

String str = "abc";
str.substring(2,4);

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4