Java

【Java】例外でreturnが複数ある場合の挙動

こんにちは、ともです。

JavaSilverの勉強をしていまして例外処理を再度、勉強中です。

例外処理はtry句やcatch句やfinally句がありますね。

そこでtry句、catch句、finally句にreturnがある場合、結局何が返されるのか理解していませんでした。

その部分についてまとめておきます。

サンプル

public class Main {
	public static void main(String[] args) {
		String str = tryCatch();
		System.out.println(str);// finally
	}
	
	public static String tryCatch() {
		try {
			return "try";//①
		} catch (Exception e) {
			return "catch";
		} finally {
			return "finally";//②
		}
	}
}

上記のコードを書くと、出力は”finally”となります。

①で”try”が返される予定でしたが、②で”finally”を返すように上書きされています。

例外を発生させる次のサンプルを作成しました。

public class Main {
	public static void main(String[] args) {
		String str = tryCatch();
		System.out.println(str);// finally
	}
	
	public static String tryCatch() {
		try {
			exception();
		} catch (Exception e) {
			return "catch";//①
		} finally {
			System.out.println("finally");//②
		}
		
		return "hoge";// 実行されない
	}
	
	public static void exception() throws Exception {
		throw new Exception();
	}
}

この場合は、catch句の中でreturnしていますので、tryCatchメソッドは中断され、”hoge”が返されることはありません。

2つのサンプルから次のことがわかりました。

  • returnは上書きされる
  • catch句の中でreturnすると、try-catchで完結する

まとめ

try-catchとreturnの関係について理解を深めました。

try-catchにreturnが複数あるような場合の挙動を理解しないと、折角の例外処理が思わぬバグを引き起こしますね。気をつけたいと思います。