考虑到这段代码,我能绝对确定无论something()
是什么,finally
块都会执行吗?
try {
something();
return success;
}
catch (Exception e) {
return failure;
}
finally {
System.out.println("I don't know if this will get printed out");
}
发布于 2008-09-15 17:59:52
示例代码:
public static void main(String[] args) {
System.out.println(Test.test());
}
public static int test() {
try {
return 0;
}
finally {
System.out.println("something is printed");
}
}
输出:
something is printed.
0
发布于 2008-09-15 18:19:54
此外,尽管这是一种糟糕的做法,但如果finally块中有一个return语句,它将胜过来自常规块的任何其他返回语句。也就是说,下面的代码块将返回false:
try { return true; } finally { return false; }
从finally块中抛出异常也是一样的事情。
发布于 2010-05-13 15:12:00
除了其他响应之外,还必须指出'finally‘有权覆盖try..catch块返回的任何异常/返回值。例如,下面的代码返回12:
public static int getMonthsInYear() {
try {
return 10;
}
finally {
return 12;
}
}
同样,下面的方法不会抛出异常:
public static int getMonthsInYear() {
try {
throw new RuntimeException();
}
finally {
return 12;
}
}
而下面的方法确实抛出了它:
public static int getMonthsInYear() {
try {
return 12;
}
finally {
throw new RuntimeException();
}
}
https://stackoverflow.com/questions/65035
复制相似问题