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

淺談Java中return和finally的問(wèn)題

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

這兩天學(xué)到了異常機(jī)制,其中try...catch...finally個(gè)人覺(jué)得算是重要的一環(huán),聯(lián)系到之前學(xué)的語(yǔ)句,遇到了return和finally這個(gè)好玩的問(wèn)題,經(jīng)過(guò)試驗(yàn),發(fā)現(xiàn)計(jì)算機(jī)語(yǔ)言這種邏輯關(guān)系果然微妙,以下是自己的見(jiàn)解,若有不對(duì)之處,望各位前輩指點(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
注意,此時(shí)第二個(gè)return是在finally語(yǔ)句外部,按照return與finally同時(shí)出現(xiàn)的規(guī)定,我們可以理解為第一個(gè)return只是一個(gè)條件,他的作用只是尋找finally語(yǔ)句,實(shí)際只是執(zhí)行了一個(gè)i+=10的運(yùn)算,然后直接進(jìn)入finally語(yǔ)句,最后return返還結(jié)果。
我們?cè)倏吹诙未a:

 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語(yǔ)句當(dāng)中,我們可以猜猜輸出的結(jié)果:

    start

    20

    finally

    50

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

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

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;
  }
}

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

    start

    finally

    10

這就是結(jié)果,finally語(yǔ)句中沒(méi)有return語(yǔ)句,那么原來(lái)的返回值就不會(huì)變化。

那么通過(guò)這三個(gè)例子可不可以這樣理解:

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

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

相關(guān)文章

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

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

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

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

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

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

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

    SpringBoot一個(gè)請(qǐng)求的處理全過(guò)程分享

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

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

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

    Java多線程中的Executor框架解析

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

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

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

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

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

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

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

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

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

最新評(píng)論

论坛| 科技| 闵行区| 平湖市| 寿阳县| 安岳县| 图木舒克市| 安达市| 民县| 疏附县| 康平县| 达州市| 广宗县| 张家口市| 鸡西市| 虹口区| 略阳县| 客服| 二连浩特市| 丰镇市| 正定县| 巴塘县| 高陵县| 罗定市| 万州区| 夏津县| 抚松县| 丹棱县| 吴川市| 汉沽区| 宜章县| 灯塔市| 辛集市| 依安县| 白玉县| 屯门区| 海门市| 增城市| 丰原市| 阳高县| 商河县|