Java代码:
public class Test1 {
public static void main(String[] args) {
int a=method1();
System.out.println("result----a="+a);
}
public static int method1(){
int a=0;
try {
a=1;
System.out.println("try----a="+a);
return a;
} catch (Exception e) {
a=2;
System.out.println("catch----a="+a);
return a;
}finally{
a=3;
System.out.println("finally----a="+a);
//return a;
}
}
}
输出结果:
try----a=1
finally----a=3
result----a=1
无论try里面有没有return,finally里的代码都会执行。加断点可以看到,执行到try里的return时,后面会走到finally里去,finally执行完以后再次跳到try里的return语句执行返回。finally里的语句执行了,但是最终返回的结果a的值是try里赋的值,而不是finally里赋的值,这是因为在try里执行到return的时候把return的结果已经暂存起来了,然后去执行finally里的代码,这时候finally里的代码不能影响方法最终的返回值,finally里的代码执行完以后再返回到try里的return,将暂存的结果返回(官方文档)。但是如果在finally里有return,则返回值是finally里的值。
例如将finally里的return语句取消注释,则
输出结果:
try----a=1
finally----a=3
result----a=3