finallyの中でreturn

Javaのfinallyはよくできていて、tryやcatchの中から抜けるときは必ずfinallyが実行される。

  • tryの中身の最後のステートメントが実行される
  • returnやcatchしてない例外でメソッドごと抜けようとする

という場合にも、必ず実行される。
returnの場合には

  1. まず返値が求められて
  2. その後finallyの中身が実行されて
  3. さっき求めた返値になる

という徹底具合。ちょっと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());
    }
}