【Java】try,catch,finally执行顺序
0个return
try{} catch(){} finally{}
按顺序执行
1个return
try{return;} catch(){} finally{}
先执行 try 里 return 之前的语句,
再执行 finally
再执行 try 里的 return。
或
如果 try 里遇到异常,执行异常之前(之后的都无法执行包括 return)。
执行 catch
再执行 finally
try{} catch(){return;} finally{}
执行 try,无异常
执行 finally
或
执行 try,有异常
直接执行 catch return之前的语句
执行 finally
再执行 catch return语句
try{} catch(){} finally{return;}
执行 try,无异常
执行 finally全部
或
执行 try,有异常
直接执行 catch
执行 finally全部。
2个return
try{return;} catch(){return;} finally{}
执行 try return之前语句,无异常
执行 finally全部
再执行 try return语句
或
执行 try return 之前语句,有异常
直接执行 catch return之前语句
执行 finally全部
再执行 catch return 语句
不多说了…
3个return
try{return;} catch(){return;} finally{return;}
执行 try return之前语句,无异常
执行 finally全部
或
执行 try return之前语句,有异常
直接执行 catch return之前语句
执行 finally全部
看下这俩图区别:
这3个图区别
总结
如果 finally里有return语句,执行finally就会直接结束,因为到finally这就会执行finally全部
1、不管有没有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。