这种反直觉的Java“功能”背后的原因是什么?

时间:2011-11-22 18:36:09

标签: java

  

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

考虑以下方法:

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

为什么会返回true?我知道finally部分总是被执行,但它应该首先执行try部分并返回true并退出方法吗?有人可以用简单的话来解释为什么Java确实像这样吗?我认为这是违反直觉的。

2 个答案:

答案 0 :(得分:2)

本质上,finally块的契约是无论try块中发生什么,它总是被执行。这就是返回true的原因。

进一步阅读:http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

答案 1 :(得分:2)

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

但是如果JVM在try块中停止,最终将不会被执行。