public int inc() {
int x;
try {
x = 1;
return x;
} catch (Exception e) {
x = 2;
return x;
} finally {
x = 3;
}
}
①如果没有抛出异常的话,返回值是多少?
②如果抛出Exception异常,返回值是多少?
③如果catch中又抛出异常,返回值是多少?
解释:①1②2③抛异常。因为Java是动态解析和链接的,在正常情况下,也会按照编译后的结果顺序执行,也就是先执行x=1,再执行return(注意这个时候只是把结果入栈,并没有向上层返回),再执行finally的x=3,这个时候只是把方法内局部变量的x值改变,并没有改变栈中的值,最后出栈,把1返回给上层。再执行return的时候,其实会把局部变量考别一份到堆栈中,之后finally的操作并不会影响堆栈中的值,直到方法结束,再把栈顶值拿出来,整个栈的生命周期结束。所以finally只适合做一些清理的工作,比如管理io流,但不能做到对返回值的修改。