考虑到此代码,我是否可以绝对确定该finally
块始终执行,无论它是什么something()
?
try {
something();
return success;
}
catch (Exception e) {
return failure;
}
finally {
System.out.println("I don't know if this will get printed out");
}
是的,finally
将在执行try
或catch
代码块后调用。
唯一finally
不会被调用的时间是:
System.exit()
Runtime.getRuntime().halt(exitStatus)
try
或catch块中达到了无限循环(或其他不间断,不终止的语句)kill -9 <pid>
在UNIX上finally
块将由守护程序线程执行并且所有其他非守护程序线程在finally
调用之前退出示例代码:
public static void main(String[] args) {
System.out.println(Test.test());
}
public static int test() {
try {
return 0;
}
finally {
System.out.println("finally trumps return.");
}
}
输出:
finally trumps return.
0