优秀的编程知识分享平台

网站首页 > 技术文章 正文

教你一招搞定try,catch,finally的执行顺序

nanyue 2024-07-29 01:33:37 技术文章 5 ℃

在面试的时候,经常会问到一些很基础的知识,比如有没接触过try,catch,finally?他们的执行顺序是怎么样的呢?你对此嗤之以鼻,这不是很简单吗?按照顺序执就行了。没错,可是如果每一块有return,并且有抛异常,扑捉异常的情况呢?估计很多 人都答不上来。下面我列出try,catch,finally的各种情况,然后总结一招搞定try,catch,finally的执行顺序。

举例:

  • 情况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;

1、程序先执行try,如果遇到异常执行catch块,

有异常:

执行catch中return语句,但不返回

执行finally语句中全部代码,

最后执行catch块中return返回。 finally块后的return语句不再执行。

无异常:

执行完try再finally再return…

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

执行try块return语句(包括return语句中的表达式运算),但不返回;

再执行finally块,

执行finally块,有return,从这里返回。

此时finally块的return值,就是代码执行完后的值

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

程序执行catch块中return语句(包括return语句中的表达式运算),但不返回;

再执行finally块,执行finally块,有return,从这里返回。

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

1、程序执行try块中return语句(包括return语句中的表达式运算),但不返回;

有异常:

执行catch块中return语句(包括return语句中的表达式运算),但不返回;

再执行finally块

执行finally块,有return,从这里返回。

无异常:

再执行finally块

执行finally块,有return,从这里返回。

最终结论:

任何执行try 或者catch中的return语句之后,在返回之前,如果finally存在的话,都会先执行finally语句,如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,编译器把finally中的return实现为一个warning。

最近发表
标签列表