例外処理について
この節の要点
- 例外が発生しそうな箇所をあらかじめtry文で囲っておくことで、catch節に復帰処理を書くことができる。
先に述べたように、プログラムを実行し続ける必要がある場合、例外が発生する可能性があればプログラムが停止してしまう可能性があるわけで、そのまま放置しておくわけにはいきません。デバッグをすることで例外が発生しないようにプログラムを書くべきです。しかしながら、すべてのエラーの可能性を踏まえてプログラムを書くことは大変です。そのため例外機構には、次のtry文 (try block)とcatch文 (catch block)とよばれる、例外が発生した際に強制終了することなく、エラー処理を記述できる仕組みが用意されています。
int x = Integer.parseInt("a"); // 文字列aを整数型データに変換を試みるが失敗
System.out.println("result: " + x);

図24に示すプログラムでは、文字列データを整数型データに変換するに当たって、文字列データに変換できない文字が含まれているため、NumberFormatExceptionが発生してしまいます(図25)。
try文とcatch文を使うことで図26のように書き下すことができます。
int x = 0;
try {
x = Integer.parseInt("a");
} catch(NumberFormatException e) {
x = -1;
}
System.out.println("result: " + x);
try文は例外が投げられるであろう可能性がある命令を事前に囲っておくことで、例外が投げられた際に、tryブロック中のそれ以降の処理を中断し、対応する例外が割り当てられたcatch節のブロックの処理を実行します。つまり、try節で例外の捕捉を行い、catch節にはエラー復帰処理を書くことになります。その結果、図26を実行すると例外が発生するものの、復帰処理を行うことでプログラムを正常に実行終了しています(図27)。
