1. 当try,catch中有return,finally中没有return时,无论finally中对返回值如何修改,最后返回的依旧是try,catch中的返回值。
2. 当try,cath中没有return,finally中有return时,最后返回的是finally中经过处理的返回值。
3. 当try,catch中有return,finally中有return时,try,catch中的return被finally中的return覆盖,最后真正返回的是finally中经过处理的返回值。
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
Demo01 demo01 = new Demo01();
int i = 0;
System.out.println(demo01.a(i));
}
public int a(int i){
try{
i++;
return i;
}catch (Exception e){
e.printStackTrace();
}finally {
i++;
System.out.println(i);
}
return i;
}
}
运行结果:
先执行try语句块,i = 1,先加载 return i,不输出结果(i = 1)。由于没有异常,直接执行finally语句 i = 2,输出 i 的值,执行完finally语句后再输出 try语句块中的return语句。