搜索
写经验 领红包

手机卡了怎么办教你一招搞定(教你一招搞定客户)

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

在面试的时候,经常会问到一些很基础的知识,比如有没接触过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。

免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小信创作整理编辑!