首先要确定的一点是,不管有没有出现异常,finally块中代码都会执行
1.try有return语句,finally没有return语句,返回的是在执行finally语句之前,try里面就确定好的值
有如下代码
package test;
public class TryFinallyTest {
public static void main(String[] args) {
int i = tryfinally();
System.out.println(i);
}
public static int tryfinally(){
int i = 1;
try{
i++;
return i;
}finally{
i++;
}
}
}
//输出结果:2
执行顺序是这样的,先执行try块的代码,遇到了return语句,但是没有立即返回,而是将要return的值(这里是2),暂存起来,继而执行finally块的代码;等finally块的代码执行完了(此时i=3),再返回try块的return语句(返回之前暂存的2,而不是3)。
2.try有return,finally也有return,返回的是finally语句执行之后,确定的值
package test;
public class TryFinallyTest {
public static void main(String[] args) {
int i = tryfinally();
System.out.println(i);
}
public static int tryfinally(){
int i = 1;
try{
i++;
return i;
}finally{
i++;
return -1;
}
}
}
//输出结果:-1