java 例外の種類
1.例外とは
プログラム実行中に異常事態が発生し、それ以上正常に実行できない場合に例外(exception)と呼ばれるオブジェクトを作成し、メソッドの呼び出し元に返す。
1.例外をキャッチする(try-catch-finally)
try {
例外をスローする可能性のある処理s
} catch (例外クラス型 引数名) {
例外処理(例外ハンドラ)
} finally {
最後に必ず実行される処理
}
try:例外を発生させる可能性のある処理を呼び出す場合に用いる。
try{ ~~ }の間で例外が発生し多場合、catchを用いて例外を捕まえる。
java実行時環境は、該当する例外ハンドラが書かれていないか探しにいく。
catch:スローされた例外オブジェクトとcatch節に書かれた例外クラスが合致した場合、
catch節の例外ハンドラを実行する。複数記述可。
finally:例外が発生してもしなくても実行したい処理を記述する。
2.例外をスローする(throw,throws)
メソッド名 (引数型 引数名) throws 例外クラス型,・・・
例外が発生したメソッド内で例外ハンドラを発見できない場合、例外ハンドラを求めてメソッド呼び出し元を逆に探しに行く。
例外を投げるメソッドを定義する場合は、throwsを用いてそのメソッドが例外を投げる可能性があることを明示しておく。
throws宣言されたメソッドは、try,catchで例外を捕まえないとコンパイルエラーとなる。
2.例外クラスの種類
java.lang.Throwable
|
+--java.lang.Error(例外処理任意。通常キャッチすべきでない重大なエラー)
・AssertionError ※注1
・ExceptionInitializerError(static 初期化子で予想外の例外が発生)
・StackOverFlowError(無限ループなどでスタック領域が不足)
・NoClassDefFoundError(必要なクラスが見つからない)
|
+--java.lang.Exception(コンパイル時例外)
|
+--java.lang.RuntimeException (例外処理任意。実行時例外)
・ArrayIndexOutofBoundException
・ClassCastException
・IllegalArgumentException(クラスに不正アクセスした)
・NullPointerException
・NumberFormatException
|
+--そのほか (例外処理必須。チェック例外(検査例外))
・IoException
・FileNotFoundException
・ClassNotFoundException
注1:アサーション
boolean 式を含む文で、その文が実行されるときに true であることをプログラマが検証するために使用する。
class Test{
public static void main(String[] args){
int a = 1 ;
assert (a < 0): "a < 0" ; ← a < 0であることを保証する。
}
}