【发布时间】:2011-11-22 18:36:09
【问题描述】:
考虑以下方法:
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