• Java中的try+catch+finally+return的返回值问题


    单纯的笔记。

    第一种:try{}catch(){}finally{}return;

    该情况语句后顺序执行。(不考虑异常)

    第二种:try{return;}catch(){}finally{}return;

    该情况为刚才说的题目情况,即执行完try语句块,将return的值保存在临时栈中,再执行finally语句块,之后返回临时栈中的值。

    第三种:try{}catch(){return;}finally{}return;

    无异常:执行try,执行finally,再执行return;

    有异常:执行完catch语句块,将return的值保存在临时栈中,再执行finally语句块,之后返回临时栈中的值。

    第四种:try{}catch(){}finally{return;}

    执行finally中的return语句。

    第五种:try{return;}catch(){return;}finally{};

    根据有无异常执行和情况二或情况三。

    第六种:try{return;}catch(){}finally{return;}

    执行完try语句块,将return的值保存在临时栈中,再执行finally语句块,因为finally中有return,所以返回finally中的return值。

    第七种:try{}catch(){return;}finally{return;}

    执行完catch语句块,将return的值保存在临时栈中,再执行finally语句块,因为finally中有return,所以返回finally中的return值。

    第八种:try{return;}catch(){return;}finally{return;}

    有异常:执行情况七。

    无异常:执行情况六。

    try语句在返回前,将其他所有的操作执行完,保留好要返回的值,而后转入执行finally中的语句,而后分为以下三种情况:

        情况一:如果finally中有return语句,则会将try中的return语句”覆盖“掉,直接执行finally中的return语句,得到返回值,这样便无法得到try之前保留好的返回值。

        情况二:如果finally中没有return语句,也没有改变要返回值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值。

        情况三:如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况,:

            1)如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。

            2)如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。

    finally中最后不要有return语句,在编译器中会报警告。

    在正常情况(即程序正常执行try catch finally语句块,不会在语句中出现退出程序、线程终止等特殊情况)下,都会执行finally语句块,如果finally中有return,则程序会走finally中的return,如果没有,则先执行try或者catch中的return,将其存入临时栈中,执行完finally语句后才返回临时栈中的值。

    借鉴http://blog.csdn.net/ns_code/article/details/17485221     https://blog.csdn.net/qq_30816657/article/details/8029764

  • 相关阅读:
    2312--1.3.4 Prime Cryptarithm 牛式
    Slava and tanks 877C
    World Cup 996B(排队模拟)
    css内边距 边框
    iframs刷新的两种方法
    JS DOM节点
    JS对话框
    JS事件常用事件
    JS数组
    JS第一天
  • 原文地址:https://www.cnblogs.com/luoxiaodou/p/11229923.html
Copyright © 2020-2023  润新知