Javaの例外処理について
今回はjavaで、例外処理についてあやふやな箇所があったのでまとめておきます。
javaでの例外処理の基本パターンは次の通りです。
try{
通常の処理
}catch(例外の型 変数名){←catchは複数記述できる
例外発生時の処理
}finally{
必ず最後に行う処理(省略可能)
}
また、例外には大きく分けて3種類あります。
①Error系例外
回復の見込みがない致命的な状況。メモリ不足やクラスファイルの破損など。キャッチしても仕方ないので、キャッチの必要不可。
②Exception系
例外発生を十分予定して、対処を考える必要のある例外。ファイルの読み書きができない、ネットワーク接続できないなど。
③RuntimeException系例外
常に想定すべきとまでは言えない例外。変数がnullや配列の添え字が不正など。
例外の型
IOException:ファイルの読み書きができない例外
ConnetException:ネットワーク接続できない例外
ArithmeticException:0除算の例外
ArrayIndexOutOfBoundsException:配列の範囲を超えた例外
InputMismatchException:入力時のエラー(int型であるのに、String型を入力してしまった時)
NumberFormatException:文字列を数値型に変換しようとした場合の例外
メソッドによっては、FileWriterのように例外を発生させる可能性があるものもあります。APIリファレンスを見ると、「throws IOException」とあります。このように例外を発生させる可能性があるメソッドはtry-catch文が必要になります。
他にも独自に例外を作ることができますが、その時はExceptionクラスを継承しなければなりません。
例
public class styleException extends Exception{
//コンストラクタ
styleException(String msgStr){ super(msgStr) }
}
また例外を発生させるメソッドを作成する時はメソッドに「throws」をつけて例外を飛ばします。その際、メソッドの呼び出しもとかmainメソッドなどで必ずcatchする必要があります。
例
public void readFile() throws IOException{
FileWriter fe = new FileWriter("sample.txt");
}
例外インスタンスについて
「Exception e」で変数eに格納された例外インスタンスには、発生した例外情報についての情報がつまっています。
try{ … }catch(Exception e){ …}
例外インスタンスにはメソッドがあり、例外情報を取得できます。
・String getMessage()…例外情報の解説文取得
catch(Exception e){ e.getMessage();}
・void printStackTrace()…スタックトレース内容を画面に出力。スタックトレースとは例外が発生した経過等の情報
catch(Exception e){ e.printStackTrace();}