例外処理について

この節の要点

  • 例外が発生しそうな箇所をあらかじめtry文で囲っておくことで、catch節に復帰処理を書くことができる。

先に述べたように、プログラムを実行し続ける必要がある場合、例外が発生する可能性があればプログラムが停止してしまう可能性があるわけで、そのまま放置しておくわけにはいきません。デバッグをすることで例外が発生しないようにプログラムを書くべきです。しかしながら、すべてのエラーの可能性を踏まえてプログラムを書くことは大変です。そのため例外機構には、次のtry文 (try block)とcatch文 (catch block)とよばれる、例外が発生した際に強制終了することなく、エラー処理を記述できる仕組みが用意されています。

int x = Integer.parseInt("a"); // 文字列aを整数型データに変換を試みるが失敗

System.out.println("result: " + x);
図24:NumberFormatExceptionが発生する場合

NumberFormatException発生時の出力タブ

図25:NumberFormatException発生時の出力タブ

図24に示すプログラムでは、文字列データを整数型データに変換するに当たって、文字列データに変換できない文字が含まれているため、NumberFormatExceptionが発生してしまいます(図25)。 try文とcatch文を使うことで図26のように書き下すことができます。

int x = 0;

try {
	x = Integer.parseInt("a");

} catch(NumberFormatException e) {

	x = -1;
}

System.out.println("result: " + x);
図26:NumberFormatExceptionが発生する場合

try文は例外が投げられるであろう可能性がある命令を事前に囲っておくことで、例外が投げられた際に、tryブロック中のそれ以降の処理を中断し、対応する例外が割り当てられたcatch節のブロックの処理を実行します。つまり、try節で例外の捕捉を行い、catch節にはエラー復帰処理を書くことになります。その結果、図26を実行すると例外が発生するものの、復帰処理を行うことでプログラムを正常に実行終了しています(図27)。

NumberFormatExceptionが発生する箇所にtry-catch文を使って例外処理を追加した図26を実行した際の出力タブ

図27:NumberFormatException発生時の出力タブ