漂泊的年華
          北飄一族
          posts - 5,comments - 0,trackbacks - 0
          下面這個(gè)可憐的小程序并不能干脆的做決定。它的decisive方法將返回true。但是它也返回false。那么,它到底打印的是什么呢?甚至,合法嗎?

          class Indecisive
          {
          ?public static void main(String[] args)
          ?{
          ??System.out.println(decisive());
          ?}
          ?static boolean decisive()
          ?{
          ??try
          ??{
          ???return true;
          ??}
          ??finally
          ??{
          ???return false;
          ??}
          ?}
          }
          ???你可能認(rèn)為這個(gè)程序不合法。畢竟,decisive方法不能同時(shí)返回true和false。如果你嘗試一下,就會發(fā)現(xiàn)它
          編譯時(shí)沒有任何錯(cuò)誤,并且它打印的是false。為什么呢?
          ??? 原因在于就是在:在一個(gè)try-finally語句中,finally語句塊總是在控制權(quán)離開try語句塊時(shí)執(zhí)行。無論try
          語句塊是正常結(jié)束的,還是意外結(jié)束,情況都是如此。在一條語句或一個(gè)語句塊拋出一個(gè)異常,或者對某個(gè)封閉類型語句執(zhí)行了一個(gè)break或continue,或是像這個(gè)程序一樣執(zhí)行了一個(gè)return時(shí),將發(fā)生意外結(jié)束。之所以稱為意外結(jié)束,是因?yàn)樗鼈冏柚钩绦虬错樞驁?zhí)行下面的語句。
          ??? 當(dāng)try語句塊和finally語句塊都意外結(jié)束時(shí),在try語句塊中引發(fā)意外結(jié)束的原因?qū)⒈粊G棄,而整個(gè)try-finally
          語句意外結(jié)束的原因?qū)⑴cfinally語句塊意外結(jié)束的原因相同。在這個(gè)程序中,在try語句塊中的return語句所
          引發(fā)的意外結(jié)束將被丟棄,而try-finally語句意外結(jié)束是由finally語句塊中的return造成的。簡單的講,程序
          嘗試著(try)返回(return)true,但是它最終(finally)返回(return)的是false。
          ??? 總之,每一個(gè)finally語句塊都應(yīng)該正常結(jié)束,除非拋出不受檢查的異常。千萬不要用return,break,continue或throw來退出finally語句塊,并且千萬不要允許讓受檢查的異常傳播到finally語句塊之外。

          posted on 2007-01-10 14:20 迪藍(lán) 閱讀(152) 評論(0)  編輯  收藏 所屬分類: puzzled

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 扶余县| 大兴区| 宜良县| 丰台区| 宾川县| 理塘县| 漳州市| 方城县| 增城市| 临安市| 永寿县| 琼中| 八宿县| 遂昌县| 弋阳县| 黄山市| 贞丰县| 佛冈县| 汉源县| 惠东县| 徐闻县| 青阳县| 涟水县| 孟津县| 武宣县| 上蔡县| 岱山县| 肥乡县| 荣昌县| 资源县| 揭东县| 上高县| 津南区| 稻城县| 巴林右旗| 惠来县| 页游| 临江市| 屏南县| 沙雅县| 吴川市|