読者です 読者をやめる 読者になる 読者になる

catch句の存在しないtry-catch-finally

こんな要件があった。

  1. メソッドAがメソッドBを呼び出している
  2. メソッドBでExceptionが発生した場合でも必ずやりたい処理がある
  3. ExceptionはメソッドAでcatchしたい

実装するには、メソッドBではExceptionをcatchせずにfinallyで残処理をやらせて、メソッドAでcatchさせればいい。

しかし、try-catch-finallyでfinallyを省略することはあっても、catchを省略することなんてあったか……そもそもできるのか?

試してみた。

Main.java

package sample;

public class Main {

	public static void main(String[] args) {
		try{
			throwException();
		}catch(Exception e){
			// 例外をここでcatch
			System.out.println("例外発生");
			e.printStackTrace();
		}
	}

	private static void throwException(){
		int arr[] = new int[3];

		try{
			// 意図的にArrayIndexOutOfBoundsExceptionを発生させる
			arr[10] = 5;
			System.out.println("処理正常終了");
		}finally{
			// catchを書かずにfinally
			System.out.println("finally句に入りました");
		}
	}

}

実行結果

finally句に入りました
例外発生
java.lang.ArrayIndexOutOfBoundsException: 10
	at sample.Main.throwException(Main.java:20)
	at sample.Main.main(Main.java:7)

できたできた。
けど、こういう書き方って普通しないのかなあ?
もっといい書き方があれば教えてください。