参考博客1(https://blog.csdn.net/kavensu/article/details/8067850)
参考博客2(https://blog.csdn.net/qq_33275672/article/details/76585345)
执行原则
- 有没有异常,finally中的语句都会执行
- 当try和catch中有return时,finally仍然会执行;
- finally的return值会覆盖其他位置的return值
四个例子
- a 为1
public static int test() {
int a = 1;
try {
return a;
} catch (Exception e) {
return a+1;
}finally {
++a;
}
}
- a为2
public static int test() {
int a = 1;
try {
return a;
} catch (Exception e) {
return a+1;
}finally {
++a;
return a;
}
}
- a为4
public static int test() {
int a = 1;
try {
int c = 1/0;
return a;
} catch (Exception e) {
a += 2;
return a;
}finally {
++a;
return a;
}
}
a为3
public static int test() {
int a = 1;
try {
int c = 1/0;
return a;
} catch (Exception e) {
a += 2;
return a;
}finally {
++a;
}
}
结论
- finally里的return优先级最高,如果try,catch,finally,里都有return,最后是从finally里的return返回的。
- 在执行finally里的语句之前,要return的值已经确定了。即,先执行最终的return之前的语句,此时确定返回值;之后执行finally里的其他语句,再从return处返回。