美文网首页Android进阶之路Android开发Android技术知识
Carson带你学Java:一文带你了解多种情形下return

Carson带你学Java:一文带你了解多种情形下return

作者: Carson带你学安卓 | 来源:发表于2021-11-02 08:43 被阅读0次

    前言

    • Java中,不同情形下returnfinally的执行顺序很多人混淆不清
    • 本文全面 & 详细解析不同情形下returnfinally的执行顺序,希望你们会喜欢

    目录

    • 储备知识
    • 终极结论
    • 场景分析
    • 总结
    • 额外补充:final、finally和finallize的区别

    1. 储备知识

    • try / catch是常见的捕捉异常 & 处理的语句
    • 只有try语句中抛出异常,才会执行catch中的语句
    /**
      * try中无抛出异常,则catch中的代码不执行 
      */
        try{ 
            // 代码无抛出异常 
            return  result; 
    
          }catch(Exception e){ 
            // catch代码 
         }
    
     /**
       * try中抛出异常,则执行catch中的语句
       */
         try{ 
            //代码抛出异常 
            throw Exception; 
            return1  result1; 
    
          } catch(Exception e){ 
           return2  result2; // 执行catch中的语句
         }
    

    2. 终极结论

    无论什么情况(异常与否、try / catch 前面存在return),finally块代码一定会执行

    必须谨记!!


    3. 具体场景分析

    下面,我将根据具体的使用场景来全面解析不同情形下returnfinally的执行顺序

    3.1 try 或 catch中存在return语句、finally无return语句

    • 执行顺序 结论
      return后的语句-> finally语句 -> return结束函数 & 返回值

    finally语句不影响最终返回值,即返回值在finally前就决定

    • 详细讲解
      此处细分为2种情况:
      a. try中有return、无抛出异常
      b. try中有return、抛出异常 、catchreturn
    /**
      * 情况1:try中有return、无抛出异常 
      * 实际执行顺序:
      *            1. 执行 try块语句
      *            2. 执行 return后 的语句:得到结果result & 保存下来
      *            3. 执行 finally块语句:不影响上述保存的返回值,哪怕修改了变量的值
      *            4. 执行 return,结束函数,返回result的值:依旧返回步骤2保存的结果
      */
        try{ 
          //代码无抛出异常 
          return  result; 
    
            }catch(Exception e){ 
         
             }finally{ 
              // finally代码 
         }
    
    /**
      * 情况2:try中有return、抛出异常 、catch有return
      * 实际执行顺序:
      *            1. 执行 try块语句
      *            2. 执行 throw 语句 :此时已抛出异常,运行因异常而终止,故不执行return1
      *            3. 执行 catch块语句 
      *            4. 执行 return2后 的语句:得到结果result2 & 保存下来
      *          5. 执行 finally块语句:不影响上述保存的返回值,哪怕修改了变量的值
      *          6. 执行 return2,结束函数,返回result2的值:依旧返回步骤4保存的结果   
      */
        try{ 
          //代码抛出异常 
          throw Exception; 
          return1  result1; 
    
           }catch(Exception e){ 
            return2  result2; 
    
           }finally{ 
             // finally代码 
          }
    

    3.2 finally中存在return语句(无论 try 或 catch之一 或 都存在return语句 )

    • 执行顺序 结论
      当执行到finally语句的 return时,程序就直接返回

    finally中的return会覆盖掉其它位置的return

    • 详细讲解
      此处细分为2种情况:
      a. try & catch中都无return、无抛出异常 & finally中 有 return
      b. try / catch中任意1者 或 都有returntry中的returncatch中的return最多只有1个会执行)、finally中 有 return
    /**
      * 情况1:try & catch中都无return、无抛出异常 & finally中 有 return
      * 实际执行顺序:
      *            1. 执行 try块语句
      *            2. 执行 finally块语句:会影响返回值
      *            3. 执行 return,结束函数,返回result的值
      */
        try{ 
    
          }catch(Exception e){ 
    
          }finally{ 
             return result ;
         }
    
    /**
      * 情况2:try / catch中任意1者 或 都有return(try中的return和catch中的return最多只有1个会执行)、finally中 有 return
      * 实际执行顺序:
      *            1. 执行 try块语句:设无抛出异常,则不执行catch语句 & return2
      *            2. 执行 return1 后 的语句:得到结果result & 保存下来
      *            3. 执行 finally块语句:不影响上述保存的返回值,哪怕修改了变量的值
      *            4. 执行finally内的 return3 后语句:finally中的return会覆盖掉其它位置的return
      *            5. 执行return3 ,结束函数,返回result3的值
      */
        try{ 
          //throw Exception; 
          return1 result1; 
    
            }catch(){ 
                 return2 result2;
             
            }finally{ 
                 return3 result3; 
            }
    

    特别注意

    finally中的语句最好:

    1. 不要包含return语句,否则程序会提前退出
    2. 返回值 ≠ trycatch中保存的返回值

    至此,关于不同情形下returnfinally的执行顺序 情况讲解完毕。


    4. 总结

    本文主要讲解了不同情形下returnfinally的执行顺序,总结如下:

    示意图

    5. 额外补充:final、finally和finallize的区别


    欢迎关注Carson_Ho的简书!

    分享Android技术干货,追求短、平、快,但却不缺深度


    请点赞!因为你的鼓励是我写作的最大动力!

    相关文章阅读:Carson带你学Android系列
    Carson带你学Android:学习方法
    Carson带你学Android:四大组件
    Carson带你学Android:自定义View
    Carson带你学Android:异步-多线程
    Carson带你学Android:性能优化
    Carson带你学Android:动画

    相关文章

      网友评论

        本文标题:Carson带你学Java:一文带你了解多种情形下return

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