一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 淺談Java中return和finally的問題

淺談Java中return和finally的問題

2020-01-09 14:18hebedich JAVA教程

在Java中當try、finally語句中包含return語句時,執行情況到底是怎樣的,finally中的代碼是否執行,大家眾說紛紜,有的說會執行,有的說不會執行,到底哪種說法正確,下面我們來詳細討論下

這兩天學到了異常機制,其中try...catch...finally個人覺得算是重要的一環,聯系到之前學的語句,遇到了return和finally這個好玩的問題,經過試驗,發現計算機語言這種邏輯關系果然微妙,以下是自己的見解,若有不對之處,望各位前輩指點:

首先看第一段代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;
  }
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
    }
  }
}

第二段代碼與第一段的區別只是將最后的return放到了finally語句當中,我們可以猜猜輸出的結果:

    start

    20

    finally

    50

此時執行的return已經將之前運算結果所得的20覆蓋,并且返還了50這個數值,也就是說在finally語句中的return是執行了,呃,應該可以這樣說吧~~

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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,那么結果是什么呢?

    start

    finally

    10

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

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产小视频在线播放 | 美女脱一净二净不带胸罩 | 日韩欧美一区二区在线 | 亚洲激情在线视频 | 久久久久久久电影 | 亚洲欧美一区二区三区在线观看 | 小鸟酱视频在线观看 | 999资源站 | 亚洲天堂免费 | 国产成人精品视频一区 | 亚洲九九精品 | 91污污视频 | 日本视频免费在线观看 | www红色一片在线观看版 | 好男人资源免费播放在线观看 | 久久WWW免费人成一看片 | gay中国| 日本在线观看www鲁啊鲁视频 | 久久久大香菇 | 久久免费看少妇高潮A片JA | 日韩一区二区三区四区区区 | 日本片免费观看一区二区 | 爆操女友 | 国产亚洲毛片在线 | zozo日本另类极品 | 日本孕妇大胆孕交 | 国产乱子伦在线观看不卡 | 无码人妻99久久密AV | 成年性午夜免费视频网站不卡 | 国产91影院 | 天美网站传媒入口网址 | 成人在线av视频 | 久久中文字幕无线观看 | 国产成人免费在线视频 | 亚洲欧美日韩综合在线播放 | 免费大秀视频在线播放 | 国产精品一区牛牛影视 | 美女机机对机机的视频(免费) | 青青视频国产依人在线 | 国产日韩一区二区 | 草莓香蕉榴莲丝瓜秋葵绿巨人在线看 |