これは、内部のコードが完了しfinally
た後に try..catch..finally のブロックが実行されるために発生します。try..catch
finally
で返された以前の値が割り当てられますtry
finally のコードは常に実行されますが、既に の値が返されていますtry
。
try {
++a;
return a;
} finally {
a = 10;
}
現在のa
値は10
、 の後return
です。良い習慣ではありませんが、デモ用です。
int a= 0;
try {
++a;
return a;
} finally {
a = 10;
return a;
}
今return
です10
。
編集:
あなたの疑問:なぜエラーが発生しないのですか?
try-catch-finally
ブロック内は異なります。同じブロックで同じことをして見てください。
try {
++a;
return a;
a=100; //compiler error.
} finally {
a = 10;
}
編集2
try-catch-finally の Java 言語仕様から:
try ステートメントはブロックを実行します。値がスローされ、try ステートメントにそれをキャッチできる 1 つ以上の catch 句がある場合、制御は最初のそのような catch 句に移されます。try ステートメントに finally 句がある場合、try ブロックが正常に完了したか突然完了したかに関係なく、また最初に catch 句に制御が与えられたかどうかに関係なく、別のコード ブロックが実行されます。