看代码吧,容易懂点。
public class Try {
public static void main(String[] args) {
System.out.println("最终结果:" + aa());
}
public static int aa() {
int a = 1;
try {
System.out.println("try:" + a);
throw new Exception();
//return a;
} catch (Exception e) {
a = 2;
System.out.println("catch:" + a);
return a;
} finally {
a = 3;
System.out.println("finally:" + a);
//return编辑器会提示finally block does not complete normally
return a;
}
}
}
//运行结果:
/*
try:1
catch:2
finally:3
最终结果:3
*/
可以把上面的代码注释一部分。试试注释掉抛出的错误。以及各个return。
结论
- finally始终执行,如果在finally中有return,始终返回这个值
- 当不抛错和在try中return a ,finally中没有return语句时, try 的 return 方法会先执行,finally的方法最后执行,然后再返回到主方法。此时最终结果是1
- finally中的return优先级最高,最终结果是3
- return的值会保存下来,不受到后面finally的影响