java try catch finally 执行顺序

来源:互联网 发布:seo关键词优化 编辑:程序博客网 时间:2024/05/22 04:24

问题:

1.finally中的语句是否一定会被执行?

    答案是否定的,有以下两种情况。    1.在进入try语句之间就已经发生异常    2.在try中强制退出,System.exit(0)(终止java虚拟机)

2.finally中的return语句究竟是在try中的return语句之前还是之后执行?

    答案是finally语句是在return语句执行之后,return返回之前执行的。

3.如果try和finally中都有return语句,最终返回哪一个?

    答案是finally中的return。

举例:

情况1:

        try{} catch(){}finally{} return;        按顺序执行。

情况2:

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

情况3:

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

情况4:

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

情况5:

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

情况6:

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

最终结论:

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