国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

淺談Java中return和finally的問題

2019-11-26 14:55:59
字體:
來源:轉載
供稿:網友

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

首先看第一段代碼

 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返還結果。
我們再看第二段代碼:

 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是執行了,呃,應該可以這樣說吧~~

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

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就直接將那個空間中的“舊值”取出來然后返還回去。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 珠海市| 平舆县| 搜索| 普陀区| 沈丘县| 鄂尔多斯市| 太谷县| 兰州市| 忻城县| 丹凤县| 乌海市| 安仁县| 松潘县| 隆子县| 玛曲县| 嘉峪关市| 织金县| 易门县| 隆德县| 钟祥市| 磐安县| 鹤山市| 辽宁省| 禹城市| 囊谦县| 杨浦区| 含山县| 衡南县| 乐至县| 通许县| 舞钢市| 太保市| 丘北县| 南阳市| 涡阳县| 迁安市| 泗洪县| 当雄县| 石泉县| 湖州市| 安溪县|