ホームページ >Java >&#&チュートリアル >Try-Finally ブロックの最終的な値を解明するのに最適な return ステートメントはどれですか?
メソッドの実行が try-finally ブロック内の複数の return ステートメントを横断するシナリオを想像してください。当然の疑問が生じます: どの return ステートメントが最終的にメソッドの最終的な戻り値を決定するのでしょうか?この謎を詳しく調べるために、特定のコード スニペットを分析してみましょう:
String test() { try { return "1"; } finally { return "2"; } }
興味深いのは、test() の呼び出しからの戻り値がすべての Java 仮想マシン (JVM) で一貫しているかどうかを理解することにあります。この謎の鍵を握るのは Java 言語仕様です。
Java 言語仕様によると、finally ブロックからの戻り値は try ブロックからの戻り値を上書きします。したがって、使用されている JVM に関係なく、最終的な戻り値として「2」が明確に指定されます。
経験的に、Sun JVM はこの仕様に準拠しています。 test() の戻り値として一貫して「2」をレンダリングします。ただし、この適合性は単に JVM 固有の癖ではないことに注意することが重要です。
仕様では明示的にこれを義務付けており、仕様から逸脱する JVM は非準拠とみなされます。したがって、仕様に準拠した JVM では、最終的な戻り値は常に "2" であると断言できます。
仕様では明確に説明されていますが、戻り値の動作に問題があるため、1 つのメソッド内で複数の戻り値を使用しないことを強くお勧めします。このようなコーディング手法は不必要な混乱を招き、基本的なコーディング原則に違反します。
test() の return ブロックは決して (誤って) 実行されないという Eclipse の主張に示されるように、コンパイラーはこの問題のあるアプローチに対して警告を発行することがよくあります。言語仕様の知恵を受け入れ、これらの忌まわしいコーディングを避けてください。
以上がTry-Finally ブロックの最終的な値を解明するのに最適な return ステートメントはどれですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。