【Java】例外処理:try – catch – finallyの使い方

■例外処理とは

例外処理とは、プログラムを実行する際、間違いが生じる可能性のある処理(例外)については、あらかじめ、その例外が発生した場合の対策(処理)を用意しておくことである。

この例外処理を実装していない場合、万が一プログラムでエラーが発生しても気づくことができず、後続の処理に大きな問題が生じる可能性があるため、極力実装することをお勧めします。

例外処理を実施する場合は、基本的に以下の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
処理を終了します

コメント