上記の例を少し変更して試しました-
public static void main(final String[] args) {
System.out.println(test());
}
public static int test() {
int i = 0;
try {
i = 2;
return i;
} finally {
i = 12;
System.out.println("finally trumps return.");
}
}
上記のコードは次を出力します。
最後に切り札が返ってきます。
2
これは、when return i;
is executablei
の値が 2 であるためです。この後finally
、12 が割り当てられたブロックが実行されi
、次にSystem.out
out が実行されます。
finally
ブロックを実行した後、ブロックtry
は 12 ではなく 2 を返します。これは、この return ステートメントが再度実行されないためです。
このコードを Eclipse でデバッグすると、ブロックの実行後System.out
にfinally
ブロックのreturn
ステートメントがtry
再度実行されるように感じるでしょう。しかし、そうではありません。単純に値 2 を返します。