亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談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的話(huà)就就把“新值”覆蓋那個(gè)空間的“舊值”,并最終返回;如果finally中沒(méi)有return就直接將那個(gè)空間中的“舊值”取出來(lái)然后返還回去。

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

相關(guān)文章

  • Java線(xiàn)程池ThreadPoolExecutor原理及使用實(shí)例

    Java線(xiàn)程池ThreadPoolExecutor原理及使用實(shí)例

    這篇文章主要介紹了Java線(xiàn)程池ThreadPoolExecutor原理及使用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java9中對(duì)集合類(lèi)擴(kuò)展的of方法解析

    Java9中對(duì)集合類(lèi)擴(kuò)展的of方法解析

    這篇文章主要介紹了Java9 中對(duì)集合類(lèi)擴(kuò)展的of方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 使用Spring Cloud Feign上傳文件的示例

    使用Spring Cloud Feign上傳文件的示例

    本篇文章主要介紹了使用Spring Cloud Feign上傳文件的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Java中json與javaBean幾種互轉(zhuǎn)的講解

    Java中json與javaBean幾種互轉(zhuǎn)的講解

    今天小編就為大家分享一篇關(guān)于Java中json與javaBean幾種互轉(zhuǎn)的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Springboot集成定時(shí)器和多線(xiàn)程異步處理操作

    Springboot集成定時(shí)器和多線(xiàn)程異步處理操作

    這篇文章主要介紹了Springboot集成定時(shí)器和多線(xiàn)程異步處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Java中關(guān)于控制臺(tái)讀取數(shù)字或字符串的方法

    Java中關(guān)于控制臺(tái)讀取數(shù)字或字符串的方法

    下面小編就為大家?guī)?lái)一篇Java中關(guān)于控制臺(tái)讀取數(shù)字或字符串的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • Java讀取txt文件和寫(xiě)入txt文件的簡(jiǎn)單實(shí)例

    Java讀取txt文件和寫(xiě)入txt文件的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇Java讀取txt文件和寫(xiě)入txt文件的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(27)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(27)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-07-07
  • Java解析XML文件開(kāi)源庫(kù)DOM4J

    Java解析XML文件開(kāi)源庫(kù)DOM4J

    dom4j是一個(gè)Java的XML API,是jdom的升級(jí)品,用來(lái)讀寫(xiě)XML文件的。dom4j是一個(gè)十分優(yōu)秀的JavaXML API,具有性能優(yōu)異、功能強(qiáng)大和極其易使用的特點(diǎn),它的性能超過(guò)sun公司官方的dom技術(shù),同時(shí)它也是一個(gè)開(kāi)放源代碼的軟件
    2023-01-01
  • 解決jmap命令打印JVM堆信息異常的問(wèn)題

    解決jmap命令打印JVM堆信息異常的問(wèn)題

    這篇文章主要介紹了解決jmap命令打印JVM堆信息異常的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12

最新評(píng)論