上記の例を少し変更して試しました-
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.outout が実行されます。
finallyブロックを実行した後、ブロックtryは 12 ではなく 2 を返します。これは、この return ステートメントが再度実行されないためです。
このコードを Eclipse でデバッグすると、ブロックの実行後System.outにfinallyブロックのreturnステートメントがtry再度実行されるように感じるでしょう。しかし、そうではありません。単純に値 2 を返します。