想象一个场景,方法的执行遍历 try-finally 块中的多个 return 语句。一个自然的问题出现了:哪个 return 语句最终决定了方法的最终返回值?为了深入研究这个谜团,让我们分析一个特定的代码片段:
String test() { try { return "1"; } finally { return "2"; } }
其中的关键在于了解调用 test() 的返回值在所有 Java 虚拟机 (JVM) 中是否一致。 Java 语言规范掌握着解开这个谜团的钥匙。
根据 Java 语言规范,finally 块的返回值会覆盖 try 块的返回值。因此,无论使用哪种 JVM,“2”都明确指定为最终返回值。
根据经验,Sun JVM 遵守此规范,始终将“2”渲染为 test() 的返回值。然而,值得注意的是,这种一致性不仅仅是 JVM 特有的怪癖。
规范明确要求它,任何偏离它的 JVM 都被视为不合规。因此,可以安全地断言,在任何符合规范的 JVM 中,最终返回值始终为“2”。
虽然规范提供了明确的说明返回值行为,强烈建议不要在单个方法中使用多个返回值。这种编码实践会带来不必要的混乱并违反基本编码原则。
编译器通常会针对这种有问题的方法发出警告,例如 Eclipse 断言 test() 的返回块永远不会执行(错误)。拥抱语言规范的智慧并避免这些令人厌恶的编码。
以上是哪个返回语句占主导地位:揭示 Try-Finally 块中的最终值?的详细内容。更多信息请关注PHP中文网其他相关文章!