在Java中,try {...} finally {...}对我来说有些不直观.如另一个问题所示,最终总是在Java中执行吗?,如果try块中有return语句,则在定义finally块时将忽略它.例如,功能
boolean test () {
try {
return true;
}
finally {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
总是会返回false.我的问题:这是为什么?这个由Java做出的设计决策背后有一个特定的哲学吗?我很感激任何见解,谢谢.
编辑:我特别感兴趣的是'为什么'Java认为可以违反我定义的语义.如果我在try块中'返回',那么该方法应该在那里返回.但是JVM决定忽略我的指令并从一个实际尚未到达的子程序返回.
And*_*yle 37
从技术上讲,return如果定义了finally块,则不会忽略try块中的,只有当finally块也包含a时.return
这是一个可疑的设计决策,回想起来可能是一个错误(很像默认情况下引用是可空/可变的,并且根据一些情况,检查异常).在许多方面,这种行为与对口语的口语理解完全一致finally- "无论事先在try块中发生什么,总是运行此代码." 因此,如果你return true从一个finally区块,总体效果必须始终是返回true,不是吗?
一般来说,这很少是一个很好的习惯用法,你应该finally自由地使用块来清理/关闭资源,但很少从它们返回一个值.
| 归档时间: |
|
| 查看次数: |
21202 次 |
| 最近记录: |