ホームページ > Java > &#&チュートリアル > Finally ブロックの Return ステートメントが Try ブロックの戻り値をオーバーライドするのはなぜですか?

Finally ブロックの Return ステートメントが Try ブロックの戻り値をオーバーライドするのはなぜですか?

Linda Hamilton
リリース: 2024-11-11 02:34:02
オリジナル
1025 人が閲覧しました

Why Does a Return Statement in a Finally Block Override the Try Block's Return Value?

戻り値が変更されない理由

try-finally ステートメントでは、try ブロックの実行は return ステートメントの実行で終了します。この時点で、メソッドによって返される変数 s の値は、return ステートメントが実行された時点の s の値です。

finally 句が後で s の値を変更しても、変更は行われません。 return ステートメントがすでに実行された後は、メソッドの戻り値を変更しないでください。

不変オブジェクトと可変オブジェクト

この動作は、の値を直接変更するときに適用されることに注意することが重要です。それ自体はfinallyブロック内にあります。ただし、 s が変更可能なオブジェクト (String は参照しない) を参照していた場合、finally ブロック内でオブジェクトの内容を変更すると、戻り値に反映されます。 > Java 言語仕様 (JLS) のセクション 14.20.2 に、これらの操作に関する詳細なガイドラインが記載されています。このセクションでは、try ブロック内の return ステートメントが突然終了を構成すると述べています。したがって、セクション 14.17 では、return ステートメントがブロックの実行を突然終了することについて説明しています。

例外処理と Return ステートメント

return により try ブロックとfinally ブロックの両方が突然終了した場合

例外のスロー以外の理由で try ブロックが突然終了した場合、finally ブロックが実行されます。その後、try ステートメントは同じ理由で突然完了します。

finally ブロックが理由 S で突然終了した場合、try ステートメントは理由 S で突然完了し、元の理由は破棄されます。

    これらのルールの結果、finally ブロック内の return ステートメントが try-finally ステートメント全体の戻り値を決定し、try ブロックからの戻り値をオーバーライドします。同様の現象が、try-catch-finally ステートメントでも発生します。この場合、例外が try ブロックでスローされ、catch ブロックによって処理され、catch ブロックとfinally ブロックの両方に return ステートメントが含まれます。

以上がFinally ブロックの Return ステートメントが Try ブロックの戻り値をオーバーライドするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート