例1:
public static int func (){
try{
return 1;
}catch (Exception e){
return 2;
}finally{
return 3;
}
}
输出结果为:3
例2:
public class Test {
public static void main(String[] args) {
System.out.println(fun());
}
@SuppressWarnings("finally")
public static int fun(){
int i = 0;
try{
return i;
}catch(Exception e){
return ++i;
}finally{
++i;
}
}
}
虽然程序在执行return返回之前i的值已经变为1,但是输出结果为::0
总结:
return在try-catch-finally中:
1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally语句是在try或catch中的return语句执行之后返回之前执行的且finally里的修改语句不会影响try或catch中return已经确定的返回值(因为会把try或catch中return要返回的值先保存起来,然后再执行finally中的语句,所以不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值);若finally里也有return语句则覆盖try或catch中的return语句直接返回。