憨厚生

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            165 隨筆 :: 17 文章 :: 90 評(píng)論 :: 0 Trackbacks
          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          公告

          本博客只作為本人學(xué)習(xí)資料使用,如侵犯你的相關(guān)權(quán)益,請(qǐng)聯(lián)系我!我會(huì)盡快做出處理! 如商業(yè)用途請(qǐng)讓本人知道,轉(zhuǎn)摘保留本人姓名,blog地址.
          Email:

          常用鏈接

          留言簿(6)

          隨筆分類(185)

          隨筆檔案(165)

          文章檔案(17)

          http://www.blogcn.com/u3/19/23/zhjhlz/inde

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

             在http://www.cnitblog.com/yemoo/archive/2008/06/18/45850.html文中巧用try finally;但是讓我對(duì)finally執(zhí)行過程有點(diǎn)疑惑,發(fā)現(xiàn)java的try catch功能和js是一樣的。下面列出例子:
             public int test1(){
             int i=4;
             try{ return i;}finally{ i=0;System.out.println("---test----");}
          }
             執(zhí)行結(jié)果:輸出---test----,test1方法返回4;我的疑惑是為什么不返回0
             在QQ群里討論的時(shí)候,有人說finally中的語句在try中的return后執(zhí)行。但是如下代碼執(zhí)行否決了上面的結(jié)論。
          public int test2(){
             int i=4;
             try{ return i;}finally{ i=0;System.out.println("---test----");return i;}
          }
             注意:在finally中多了個(gè)return i;
             執(zhí)行結(jié)果:輸出---test----,test2方法返回0;
             這個(gè)例說明了finally中的語句是在try的return執(zhí)行前執(zhí)行的。那么test1方法的finally中i=0了,但是為什么test1方法還返回4呢?這是我的疑惑,那位知道解釋一下。

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

          評(píng)論

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

          第一個(gè)test中return壓棧后,棧中的值沒有變,所以返回4  回復(fù)  更多評(píng)論
            

          # re: try catch finally一點(diǎn)疑惑 2009-04-01 13:12 sex
          就是先把return后面的值保存起來了 執(zhí)行finally之后 再返回  回復(fù)  更多評(píng)論
            

          # re: try catch finally一點(diǎn)疑惑 2009-04-01 14:07 隔葉黃鶯
          finally 相當(dāng)于一個(gè)小例程  回復(fù)  更多評(píng)論
            

          # re: try catch finally一點(diǎn)疑惑 2009-04-01 14:07 JetMa
          @jbahamut
          正解  回復(fù)  更多評(píng)論
            

          # re: try catch finally一點(diǎn)疑惑 2009-04-01 20:31 dennis
          看字節(jié)碼
            回復(fù)  更多評(píng)論
            

          # re: try catch finally一點(diǎn)疑惑 2009-04-02 08:25 erhu
          @jbahamut
          哦,原來是這樣的!  回復(fù)  更多評(píng)論
            

          # re: try catch finally一點(diǎn)疑惑 2009-04-02 10:47 Fingki.li
          finally塊里盡量避免使用return,會(huì)吃掉exception.  回復(fù)  更多評(píng)論
            

          # re: try catch finally一點(diǎn)疑惑[未登錄] 2009-04-03 09:03 GreatGhoul
          大開眼界呀.有這種用法.  回復(fù)  更多評(píng)論
            

          # re: try catch finally一點(diǎn)疑惑 2009-04-05 14:02 shivaree
          受教了。。。這些小概念都很奇特啊。  回復(fù)  更多評(píng)論
            

          # re: try catch finally一點(diǎn)疑惑 2009-10-29 20:03 yonder
          try catch finally是同一個(gè)方法,就是同一個(gè)棧里面,所以退棧來解釋是錯(cuò)誤的.這是因?yàn)閞eturn i;已經(jīng)執(zhí)行,已經(jīng)把i的值拷貝一個(gè)臨時(shí)變量,這個(gè)語句有好幾個(gè)匯編語句組成的,所以僅僅是整個(gè)方法返回這一步執(zhí)行之前,才去執(zhí)行finally語句,在finally里面改變i的值,但是已經(jīng)不能改變前面那個(gè)臨時(shí)變量了.  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 嘉义市| 会泽县| 武胜县| 龙岩市| 铜鼓县| 大石桥市| 韶关市| 尖扎县| 北海市| 横峰县| 壶关县| 淮安市| 漾濞| 库车县| 微博| 双江| 晋中市| 罗甸县| 弥勒县| 咸丰县| 来宾市| 韶山市| 大港区| 兴海县| 宜章县| 鄂伦春自治旗| 邛崃市| 通山县| 卢龙县| 冕宁县| 静安区| 八宿县| 托克托县| 达孜县| 海林市| 姜堰市| 宾阳县| 绥阳县| 宜兰县| 酒泉市| 准格尔旗|