手机卡了怎么办教你一招搞定(教你一招搞定客户)
导语:教你一招搞定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。
免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小信创作整理编辑!