【问题标题】:What's the reason behind this counter-intuitive Java "feature"? [duplicate]这个反直觉的 Java“特性”背后的原因是什么? [复制]
【发布时间】:2011-11-22 18:36:09
【问题描述】:

可能重复:
Java try-finally return design question

考虑以下方法:

public boolean test() {
   try {
      return false;
   } finally {
      return true;
   }
}

为什么返回true?我知道finally部分总是执行,但是它应该先执行try部分然后return true然后退出方法吗?有人能用简单的话解释一下为什么 Java 会这样吗?我认为这是非常违反直觉的。

【问题讨论】:

  • 为什么不应该 finally 在方法退出时运行?我认为违反直觉的唯一部分是 return 完全允许在 finally 中使用。
  • finally 仅表示“每次都最后一次”(即使抛出异常)。在这种情况下它不太有意义,我从未见过这样的代码,但它通常用于关闭流或文件,或者在离开方法之前需要完成的任何清理,无论该方法如何执行。
  • 哇,java实际上允许你在脚上开枪!
  • @Roflcoptr:哦,在那种情况下... ;) 不,它仍然是重复的 =P
  • 它返回true,因为finally块的代码总是最后执行。如果它让你感觉更好,try 块中的返回实际上会被执行 - finally 只是覆盖返回的数据。回想一下你的 C 天,这将是完全有意义的。

标签: java


【解决方案1】:

由于“finally”总是执行,它在放弃方法外的控制流(即返回)之前执行。

但是如果JVM在try块中停止,finally就不会被执行。

【讨论】:

    【解决方案2】:

    从本质上讲,finally 块的约定是,无论 try 块中发生什么,它都会始终执行。这就是返回 true 的原因。

    延伸阅读:http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

    【讨论】:

    • @Roflcoptr - 糟糕,感谢您的纠正。
    猜你喜欢
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2020-10-09
    • 2018-08-31
    相关资源
    最近更新 更多