我想知道,是不是很好的做法,return从try块?
package debug;
/**
*
* @author Owner
*/
public class Main {
public static void main(String[] args) {
System.out.println(fun());
}
static boolean cleanup() {
// Fail to cleanup.
return false;
}
static boolean fun() {
boolean everything_is_fine = true;
try {
System.out.println("open file stream");
return everything_is_fine;
} finally {
everything_is_fine = cleanup();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我首先想到false会打印出来.但是,这是输出:
open file stream
true
Run Code Online (Sandbox Code Playgroud)
如您所见,如果我return在try块内有语句,我将在finally清理期间错过失败状态.
我要把代码作为:
static boolean fun() {
boolean everything_is_fine = true;
try {
System.out.println("open file stream");
} finally {
everything_is_fine = cleanup();
}
return everything_is_fine;
}
Run Code Online (Sandbox Code Playgroud)
只要涉及finally块的返回值,我应该避免从尝试返回吗?
Boz*_*zho 18
您建议的代码(在问题的最后)是好的.您可以从finally块中返回,但您不应该 - 例如eclipse显示警告"finally块无法正常完成".
实际上,try/finally并没有直接关系到return.这似乎是这样,因为它是方法中唯一的构造,但是之后你可以有其他代码(例如 - 事件通知),然后返回.
至于你的问题-你不能改变的值返回的变量中finally,如果已经返回它块.所以不要从try.
| 归档时间: |
|
| 查看次数: |
24249 次 |
| 最近记录: |