憨厚生

          ----Java's Slave----
          ***Java's Host***

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks
             在http://www.cnitblog.com/yemoo/archive/2008/06/18/45850.html文中巧用try finally;但是讓我對finally執行過程有點疑惑,發現java的try catch功能和js是一樣的。下面列出例子:
             public int test1(){
             int i=4;
             try{ return i;}finally{ i=0;System.out.println("---test----");}
          }
             執行結果:輸出---test----,test1方法返回4;我的疑惑是為什么不返回0
             在QQ群里討論的時候,有人說finally中的語句在try中的return后執行。但是如下代碼執行否決了上面的結論。
          public int test2(){
             int i=4;
             try{ return i;}finally{ i=0;System.out.println("---test----");return i;}
          }
             注意:在finally中多了個return i;
             執行結果:輸出---test----,test2方法返回0;
             這個例說明了finally中的語句是在try的return執行前執行的。那么test1方法的finally中i=0了,但是為什么test1方法還返回4呢?這是我的疑惑,那位知道解釋一下。

          posted on 2009-04-01 11:54 二胡 閱讀(2194) 評論(10)  編輯  收藏 所屬分類: Java

          評論

          # re: try catch finally一點疑惑[未登錄] 2009-04-01 12:20 jbahamut
          return 壓棧,執行finally,方法返回

          第一個test中return壓棧后,棧中的值沒有變,所以返回4  回復  更多評論
            

          # re: try catch finally一點疑惑 2009-04-01 13:12 sex
          就是先把return后面的值保存起來了 執行finally之后 再返回  回復  更多評論
            

          # re: try catch finally一點疑惑 2009-04-01 14:07 隔葉黃鶯
          finally 相當于一個小例程  回復  更多評論
            

          # re: try catch finally一點疑惑 2009-04-01 14:07 JetMa
          @jbahamut
          正解  回復  更多評論
            

          # re: try catch finally一點疑惑 2009-04-01 20:31 dennis
          看字節碼
            回復  更多評論
            

          # re: try catch finally一點疑惑 2009-04-02 08:25 erhu
          @jbahamut
          哦,原來是這樣的!  回復  更多評論
            

          # re: try catch finally一點疑惑 2009-04-02 10:47 Fingki.li
          finally塊里盡量避免使用return,會吃掉exception.  回復  更多評論
            

          # re: try catch finally一點疑惑[未登錄] 2009-04-03 09:03 GreatGhoul
          大開眼界呀.有這種用法.  回復  更多評論
            

          # re: try catch finally一點疑惑 2009-04-05 14:02 shivaree
          受教了。。。這些小概念都很奇特啊。  回復  更多評論
            

          # re: try catch finally一點疑惑 2009-10-29 20:03 yonder
          try catch finally是同一個方法,就是同一個棧里面,所以退棧來解釋是錯誤的.這是因為return i;已經執行,已經把i的值拷貝一個臨時變量,這個語句有好幾個匯編語句組成的,所以僅僅是整個方法返回這一步執行之前,才去執行finally語句,在finally里面改變i的值,但是已經不能改變前面那個臨時變量了.  回復  更多評論
            

          主站蜘蛛池模板: 湄潭县| 拜泉县| 渭南市| 黎川县| 吴川市| 菏泽市| 买车| 河南省| 丘北县| 昭通市| 开阳县| 冷水江市| 乐东| 湾仔区| 白城市| 门头沟区| 农安县| 咸阳市| 胶州市| 宁武县| 同心县| 旺苍县| 大冶市| 河曲县| 镇远县| 兴安盟| 康定县| 高尔夫| 天台县| 留坝县| 永修县| 富宁县| 洪洞县| 无棣县| 海口市| 麟游县| 大渡口区| 碌曲县| 博湖县| 民丰县| 洛川县|