最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Java中return和finally的問題

 更新時間:2015年10月11日 11:33:57   投稿:hebedich  
在Java中當(dāng)try、finally語句中包含return語句時,執(zhí)行情況到底是怎樣的,finally中的代碼是否執(zhí)行,大家眾說紛紜,有的說會執(zhí)行,有的說不會執(zhí)行,到底哪種說法正確,下面我們來詳細(xì)討論下

這兩天學(xué)到了異常機(jī)制,其中try...catch...finally個人覺得算是重要的一環(huán),聯(lián)系到之前學(xué)的語句,遇到了return和finally這個好玩的問題,經(jīng)過試驗(yàn),發(fā)現(xiàn)計(jì)算機(jī)語言這種邏輯關(guān)系果然微妙,以下是自己的見解,若有不對之處,望各位前輩指點(diǎn):

首先看第一段代碼

 public class return_finally{
   public static void main(String[] args){
     System.out.println( m_1() );
   }
   public static int m_1(){
     int i=10;
     try{
       System.out.println( "start" );
      return i+=10;
     }catch(Exception e){
       System.out.println( "error: "+e );
     }finally{
       if(i>10){
         System.out.println( i );
       }
       System.out.println( "finally" );
     }
     return i;
   }
 }

第一段代碼輸出結(jié)果如下:
    start
    20
    finally
    20
注意,此時第二個return是在finally語句外部,按照return與finally同時出現(xiàn)的規(guī)定,我們可以理解為第一個return只是一個條件,他的作用只是尋找finally語句,實(shí)際只是執(zhí)行了一個i+=10的運(yùn)算,然后直接進(jìn)入finally語句,最后return返還結(jié)果。
我們再看第二段代碼:

 public class return_finally{
   public static void main(String[] args){
     System.out.println( m_1() );
   }
   public static int m_1(){
     int i=10;
     try{
       System.out.println( "start" );
      return i+=10;
      
     }catch(Exception e){
       System.out.println( "error: "+e );
     }finally{
       if(i>10){
         System.out.println( i );
       }
       System.out.println( "finally" );
       return 50; 
     }
   }
 }

第二段代碼與第一段的區(qū)別只是將最后的return放到了finally語句當(dāng)中,我們可以猜猜輸出的結(jié)果:

    start

    20

    finally

    50

此時執(zhí)行的return已經(jīng)將之前運(yùn)算結(jié)果所得的20覆蓋,并且返還了50這個數(shù)值,也就是說在finally語句中的return是執(zhí)行了,呃,應(yīng)該可以這樣說吧~~

還有第三段代碼,大家慢慢享受:

public class return_finally{
  public static void main(String[] args){
    System.out.println( m_1() );
  }
  public static int m_1(){
    int i=10;
    try{
      System.out.println( "start" );
      return i;
    }catch(Exception e){
      System.out.println( "error: "+e );
    }finally{
      if(i>10){
        System.out.println( i );
      }
      System.out.println( "finally" );
        i=50; 
    }
    return i;
  }
}

此時finally語句中多了i=50,那么結(jié)果是什么呢?

    start

    finally

    10

這就是結(jié)果,finally語句中沒有return語句,那么原來的返回值就不會變化。

那么通過這三個例子可不可以這樣理解:

  碰到try語句中的return,先把值儲存到一個地方,然后尋找finally語句,如果語句中有新的算法,就從那個空間取出這個值進(jìn)行運(yùn)算,finally中有return的話就就把“新值”覆蓋那個空間的“舊值”,并最終返回;如果finally中沒有return就直接將那個空間中的“舊值”取出來然后返還回去。

  以上純屬理解,希望大家多多指點(diǎn),謝謝各位的幫助!

相關(guān)文章

  • 教你怎么用SpringBoot+Mybati-Plus快速搭建代碼

    教你怎么用SpringBoot+Mybati-Plus快速搭建代碼

    Mybatis自身通過了逆向工程來幫助我們快速生成代碼,但Mybatis-plus卻更加強(qiáng)大,不僅僅可以生成dao,pojo,mapper,還有基本的controller和service層代碼,接下來我們來寫一個簡單的人門案例是看看如何mybatis-plus是怎么實(shí)現(xiàn)的,需要的朋友可以參考下
    2021-06-06
  • 解決spring AOP中自身方法調(diào)用無法應(yīng)用代理的問題

    解決spring AOP中自身方法調(diào)用無法應(yīng)用代理的問題

    這篇文章主要介紹了解決spring AOP中自身方法調(diào)用無法應(yīng)用代理的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring事務(wù)管理中的異?;貪L是什么

    Spring事務(wù)管理中的異?;貪L是什么

    Spring中的代碼出現(xiàn)異常時會回滾這是大家都希望的情況,這時候可以用@Transactional這個注解放在你的方法上來進(jìn)行回滾,這時候有個問題就是事務(wù)回滾是不希望你在Controller進(jìn)行處理,而是在Service層來進(jìn)行處理
    2023-02-02
  • SpringBoot一個請求的處理全過程分享

    SpringBoot一個請求的處理全過程分享

    本文詳細(xì)介紹了SpringBoot請求處理的全過程,包括過濾器鏈、攔截器鏈、路徑映射、參數(shù)綁定、Controller方法執(zhí)行、返回值處理、異常解析和視圖解析渲染等步驟,同時,文中還列舉了請求處理過程中常見的問題及解決方案
    2024-12-12
  • eclipse創(chuàng)建項(xiàng)目沒有dynamic web的解決方法

    eclipse創(chuàng)建項(xiàng)目沒有dynamic web的解決方法

    最近上課要用到eclipse,要用到Dynamic web project.但是我下載的版本上沒有.接下來就帶大家了解 eclipse創(chuàng)建項(xiàng)目沒有dynamic web的解決方法,文中有非常詳細(xì)的圖文示例,需要的朋友可以參考下
    2021-06-06
  • Java多線程中的Executor框架解析

    Java多線程中的Executor框架解析

    這篇文章主要介紹了Java多線程中的Executor框架解析,Executor 框架是 Java5 之后引進(jìn)的,在 Java 5 之后,通過 Executor 來啟動線程比使用 Thread 的 start 方法更好,除了更易管理,效率更好,需要的朋友可以參考下
    2023-12-12
  • Nacos配合SpringBoot實(shí)現(xiàn)動態(tài)線程池的基本步驟

    Nacos配合SpringBoot實(shí)現(xiàn)動態(tài)線程池的基本步驟

    使用Nacos配合Spring Boot實(shí)現(xiàn)動態(tài)線程池,可以讓你的應(yīng)用動態(tài)地調(diào)整線程池參數(shù)而無需重啟,這對于需要高度可配置且需要適應(yīng)不同負(fù)載情況的應(yīng)用來說非常有用,本文給大家介紹實(shí)現(xiàn)動態(tài)線程池的基本步驟,需要的朋友可以參考下
    2024-02-02
  • 自定義Jackson的ObjectMapper如何實(shí)現(xiàn)@ResponseBody的自定義渲染

    自定義Jackson的ObjectMapper如何實(shí)現(xiàn)@ResponseBody的自定義渲染

    這篇文章主要介紹了自定義Jackson的ObjectMapper如何實(shí)現(xiàn)@ResponseBody的自定義渲染,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java 如何調(diào)用long的最大值和最小值

    Java 如何調(diào)用long的最大值和最小值

    這篇文章主要介紹了Java 如何調(diào)用long的最大值和最小值的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 關(guān)于Controller層和Service層的類報(bào)錯問題及解決方案

    關(guān)于Controller層和Service層的類報(bào)錯問題及解決方案

    這篇文章主要介紹了關(guān)于Controller層和Service層的類報(bào)錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評論

朝阳区| 沛县| 湟中县| 韩城市| 岚皋县| 关岭| 运城市| 汤阴县| 祥云县| 抚远县| 万年县| 娱乐| 改则县| 鹤庆县| 彩票| 大渡口区| 桂平市| 宁南县| 金门县| 如东县| 北安市| 镇原县| 上饶县| 黄大仙区| 黔东| 利津县| 礼泉县| 虹口区| 柳州市| 青阳县| 金阳县| 黄梅县| 大英县| 长武县| 五寨县| 通河县| 长春市| 承德县| 朔州市| 沙河市| 白银市|