try catch finally,try里有return,finally还执行么?
执行的,并且finally 的执行会早于try catch 里面的return;
public int getSum(){
try {
int sum=10;
int temp =99;
return 10+99;
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("我是finally");
}
return 0;
}
//我是finally
//109
结论:
- finally 不管出没出现异常,里面的代码块都是会执行的
- 当try 和catch 中有return 的时候,还是会执行的
- finally 执行是在return 后面的表达式执行完后执行的,但是还没有具体的把值返回回去,先保存下来,等finally 里面的代码块执行完后,才会返回当时保存的值(不管finally里面的代码怎么执行,都是不会改变最后的保存的返回值的);所以函数的返回值是在finally执行前就确定的
- 最好不要在finallly里面执行返回的操作,也就是不要包含return ,否则程序就会提前退出,返回值不是try或者 catch 里面所保存的返回值
public int getSum(){
try {
int sum=10;
int temp =99;
return 10+99;
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("我是finally");
return 100;
}
}
////我是finally
///100
上面就是返回值丢失成为100了