こんにちは、ともです。
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が複数あるような場合の挙動を理解しないと、折角の例外処理が思わぬバグを引き起こしますね。気をつけたいと思います。