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();}