try catch finally和return的执行顺序

1. try/catch/finally 介绍

try:用来捕获异常
catch:用于处理try中捕获的异常
finally:无论是否捕获或处理异常,finally块中的代码都会被执行。

  • try必须有
  • finally可以无
  • try后面必须跟catch 或者 finally 其中之一
  • try后面可以有0个或者多个catch,只能有0个或者1个finally。
  • 若try后面没有catch,则必须有一个finally
  • 只要try里面出现异常,无论try里是否含return,出现异常下面的程序都不会再执行了;

情况1:try{} catch(){}finally{} return;

        程序按顺序执行。

情况2:try{ return; }catch(){} finally{} return;

        程序执行try块中return之前(包括return语句中的表达式运算)代码;再执行finally块,最后执行try中return; finally块之后的语句return,因为程序在try中已经return所以不再执行。

情况3:try{ } catch(){return;} finally{} return;

        程序先执行try,如果遇到异常执行catch块, 有异常:则执行catch中return之前(包括return语句中的表达式运算)代码,再执行finally语句中全部代码,最后执行catch块中return. finally之后也就是4处的代码不再执行。无异常:执行完try再finally再return.

情况4:try{ return; }catch(){} finally{return;}

        程序执行try块中return之前(包括return语句中的表达式运算)代码;再执行finally块,因为finally块中有return所以提前退出。

情况5:try{} catch(){return;}finally{return;}

        程序执行catch块中return之前(包括return语句中的表达式运算)代码;再执行finally块,因为finally块中有return所以提前退出。

情况6:try{ return;}catch(){return;} finally{return;}

程序执行try块中return之前(包括return语句中的表达式运算)代码;有异常:执行catch块中return之前(包括return语句中的表达式运算)代码;则再执行finally块,因为finally块中有return所以提前退出。无异常:则再执行finally块,因为finally块中有return所以提前退出。

结论:

        任何执行try 或者catch中的return语句之前,都会先执行finally语句,如果finally存在的话。如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的

你可能感兴趣的:(try,catch,finally)