finallyの中でreturn
Javaのfinallyはよくできていて、tryやcatchの中から抜けるときは必ずfinallyが実行される。
- tryの中身の最後のステートメントが実行される
- returnやcatchしてない例外でメソッドごと抜けようとする
という場合にも、必ず実行される。
returnの場合には
- まず返値が求められて
- その後finallyの中身が実行されて
- さっき求めた返値になる
という徹底具合。ちょっとbegin0っぽい?
さて問題。tryの中でreturnして、finallyの中でもreturnしたら、返値はどうなるだろう?
public class FinallyQuiz { static int q() { try { return 0; } finally { return 1; } } public static void main(String[] args) { System.out.println("return value is " + q()); } }