java try catch finally 执行顺序

问题:

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值