在下面的代码中,我想了解return
语句的行为。Finally
块将始终执行,因此该函数将始终return 30
,但是在try中返回语句的意义是什么这个返回try块返回值给它的调用者,它会将这个值存储在某个堆栈中,当它在finally
块中看到一个return语句时被替换掉?或者在try块中返回会调用finally
块?
public static int test() {
try {
return 10;// to whom this 10 is returned to?
} catch (Exception e) {
return 20;
}finally{
System.out.println("Finally");
return 30;
}
}
提前致谢。
答案 0 :(得分:1)
10
和30
都将返回。但30
位于stack
(最顶层元素)之上。所以调用者得到的返回值为30
。
答案 1 :(得分:1)
finally
块仅应用于资源清除,例如。
public static int test() {
MyResource resource = null;
try {
// resource allocation
MyResource resource = MyResource.allocate();
... // do something with the resource
return 10; // <- Normal flow
}
catch(MyResourceException e) {
... // something was wrong with resource
return 20; // <- Abnormal, but expected flow
}
finally {
// In any case - has an exception (including errors) been thrown or not
// we have to release allocated resource
// The resource has been allocated
if (resource != null)
resource.release();
// no return here: finally is for resource clearing only
}
}
如果您将return 30
放入finally 这两个值(例如,10
和30
)将是
堆叠;但由于30
位于堆栈的顶部,因此您会看到30
。
答案 2 :(得分:0)
由于在您的情况下将始终执行finally
块以清理资源,因此它将位于堆栈顶部,因为它将是30。但是,如果您想直接退出try块,则可以使用System.exit()