美文网首页
try-catch-finally-return问题

try-catch-finally-return问题

作者: Reaq | 来源:发表于2018-02-04 20:32 被阅读0次

    总结:
    1、不管有木有出现异常,finally块中代码都会执行;
    2、当try和catch中有return时,finally仍然会执行;
    3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,若finally中无return,则不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),该情况下函数返回值是在finally执行前确定的;
    4、finally中最好不要包含return,否则程序不会在try块中返回,而是从finally块中直接退出,返回值不是try或catch中保存的返回值。

    以下为转发内容:
    原文链接:
    try-catch-finally-return问题详解
    具体内容如下:
    (1)try里有一个return语句,那么紧跟在这个try后的finally里的代码会不会被执行,什么时候执行,在return前还是后;
    代码1:


    执行结果:

    (2)如果finally也有return代码 ,那执行结果是?
    代码2:

    执行结果:

    注:finally里的return覆盖掉了try里的return;
    (3)如果try后面有个catch块,里面有return语句,那么finally语句会不会执行?
    代码:

    执行结果:

    在finally块里也加上return语句:

    结果:

    注:如果finally里没有return语句,而catch里有return语句,则执行catch里的return语句;
    而如果finally里也有return语句,则返回finally里的return语句;即catch块不会影响finally的执行;
    finally语句块的作用就是为了保证无论出现什么情况,一定要执行的,那么finally里的代码肯定会执行,并且是在return前执行
    又如:执行结果是多少呢;

    执行结果:

    注:并不是try语句中return执行完之后才执行的finally;
    而是在执行return b+=88时,分成了两步,先b+=88;再return b;
    将return temp;放到System.out.println("finally块");后面,输出结果不变;
    如果将finally语句改为:

    如果finally没有返回语句覆盖的话,那原来的返回值就不会变,不管你是不是改变了要返回的哪个变量,所以返回的值依然不变,还是会返回111。

    相关文章

      网友评论

          本文标题:try-catch-finally-return问题

          本文链接:https://www.haomeiwen.com/subject/sucvzxtx.html