■例外処理とは
例外処理とは、プログラムを実行する際、間違いが生じる可能性のある処理(例外)については、あらかじめ、その例外が発生した場合の対策(処理)を用意しておくことである。
この例外処理を実装していない場合、万が一プログラムでエラーが発生しても気づくことができず、後続の処理に大きな問題が生じる可能性があるため、極力実装することをお勧めします。
例外処理を実施する場合は、基本的に以下の3つの構文を用いる。
▼try文
例外が発生しうる処理を記述する部分である。
▼catch文
try文にて例外が発生した場合に処理を行う部分である。(複数設定可能)
▼finally文
try文にて例外が発生した/しないにかかわらず、必ず最後に処理を実施する部分である。
インスタンスしたクラスのクローズ処理など、try – catchにかかわらず必ず実施する処理を記載する。
■作成するプログラムの仕様
▼実装概要
2つの引数を持たせて実行し、その2つの引数を使用して割り算を行う。
▼実装内容
1.引数を2つ(整数)指定してプログラムを実行
(try文)
2.2つの引数を変数に格納(int型)
3.2つの引数を使用して割り算を実施
4.引数と計算結果を出力
(catch文1:引数が2つ指定されなかった場合の例外処理)
E1-1.「引数を2つ指定してください」を出力
E1-2.「エラー内容」を出力
(catch文2:int型に変換できなかった時の例外処理)
E2-1.「整数を指定してください」を出力
E2-2.「エラー内容」を出力
(catch文3:ゼロ除算の例外処理)
E3-1.「0で除算されました」を出力
E3-2.「エラー内容」を出力
(catch文4:その他例外処理)
E4-1.「その他の例外が発生しました」を出力
E4-2.「エラー内容」を出力
(finally文)
F1-1.「処理を終了します」を出力
▼特記事項
今回は例外がある程度明瞭であるため、複数設定したが、起こりうる例外が不明瞭であれば、上記「catch文4:その他例外処理」だけでもを実装しておくことをお勧めします。
※「例外処理実装しません。エラーログ出力しません。」であると、障害が発生した際、どこのプログラムで何が原因でどのようなエラーが出ているのかの把握に苦労します。
■サンプルコード
public class Sample {
// メイン処理
public static void main(String[] args) {
// try文:実行処理
try {
// 実行引数を変数に格納(int型)
int num1 = Integer.parseInt(args[0]);
int num2 = Integer.parseInt(args[1]);
// 割り算を実施
int ans = num1 / num2 ;
// 結果を出力
System.out.println("引数1:" + num1);
System.out.println("引数2:" + num2);
System.out.println("計算結果:" + ans);
// 引数が2つ指定されなかった場合の例外処理
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println("引数を2つ指定してください");
System.out.println("エラー内容:" + e);
// int型に変換できなかった時の例外処理
}catch(NumberFormatException e) {
System.out.println("整数を指定してください");
System.out.println("エラー内容:" + e);
// ゼロ除算の例外処理
}catch(ArithmeticException e) {
System.out.println("0で除算されました");
System.out.println("エラー内容:" + e);
// その他例外処理
}catch(Exception e) {
System.out.println("その他の例外が発生しました");
System.out.println("エラー内容:" + e);
// try-catchにかかわらず、最後に必ず通る処理
}finally {
System.out.println("処理を終了します");
}
}
}
■実行結果
▼正常系(実行引数:4 2)
引数1:4
引数2:2
計算結果:2
処理を終了します
▼例外処理1(実行引数:4)
引数を2つ指定してください
エラー内容:java.lang.ArrayIndexOutOfBoundsException: 1
処理を終了します
▼例外処理2(実行引数:4 aaa)
整数を指定してください
エラー内容:java.lang.NumberFormatException: For input string: "aaa"
処理を終了します
▼例外処理3(実行引数:4 0)
0で除算されました
エラー内容:java.lang.ArithmeticException: / by zero
処理を終了します