返回值不变的原因
在 try-finally 语句中,try 块的执行随着 return 语句的执行而结束。此时,该方法返回的变量 s 的值就是执行 return 语句时 s 的值。
尽管 finally 子句稍后修改了 s 的值,但它确实在 return 语句执行后,不要更改方法的返回值。
不可变对象与可变对象
需要注意的是,这种行为适用于直接修改s 本身位于finally 块中。但是,如果 s 引用了可变对象(String 不是),则修改 finally 块中的对象内容将反映在返回值中。
法律规范
Java 语言规范 (JLS) 在第 14.20.2 节中提供了这些操作的详细指南。在本节中,它指出 try 块中的 return 语句构成突然终止。因此,第 14.17 节解释了 return 语句突然结束块执行。
异常处理和 Return 语句
如果 try 块和 finally 块由于 return 突然终止语句,适用 §14.20.2 中的规则:
这些规则的结果是,finally 块中的 return 语句决定整个 try-finally 语句的返回值,从而覆盖 try 块中的返回值。类似的现象也发生在 try-catch-finally 语句中,其中 try 块中抛出异常并由 catch 块处理,并且 catch 和 finally 块都包含 return 语句。
以上是为什么Finally 块中的Return 语句会覆盖Try 块的返回值?的详细内容。更多信息请关注PHP中文网其他相关文章!