BloveSaga

          在希臘帕爾納斯山南坡上,有一個馳名世界的戴爾波伊神托所,在它的入口處的巨石上赫然銹刻著這樣幾個大字: 認識你自己!

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            34 隨筆 :: 12 文章 :: 122 評論 :: 0 Trackbacks
          ???? 下面這個可憐的小程序并不能干脆的做決定。它的decisive方法將返回true。但是它也返回false。那么,它到底打印的是什么呢?甚至,合法嗎?

          class Indecisive
          {
          ?public static void main(String[] args)
          ?{
          ??System.out.println(decisive());
          ?}
          ?static boolean decisive()
          ?{
          ??try
          ??{
          ???return true;
          ??}
          ??finally
          ??{
          ???return false;
          ??}
          ?}
          }
          ???你可能認為這個程序不合法。畢竟,decisive方法不能同時返回true和false。如果你嘗試一下,就會發現它
          編譯時沒有任何錯誤,并且它打印的是false。為什么呢?
          ??? 原因在于就是在:在一個try-finally語句中,finally語句塊總是在控制權離開try語句塊時執行。無論try
          語句塊是正常結束的,還是意外結束,情況都是如此。在一條語句或一個語句塊拋出一個異常,或者對某個封閉類型語句執行了一個break或continue,或是像這個程序一樣執行了一個return時,將發生意外結束。之所以稱為意外結束,是因為它們阻止程序按順序執行下面的語句。
          ??? 當try語句塊和finally語句塊都意外結束時,在try語句塊中引發意外結束的原因將被丟棄,而整個try-finally
          語句意外結束的原因將與finally語句塊意外結束的原因相同。在這個程序中,在try語句塊中的return語句所
          引發的意外結束將被丟棄,而try-finally語句意外結束是由finally語句塊中的return造成的。簡單的講,程序
          嘗試著(try)返回(return)true,但是它最終(finally)返回(return)的是false。
          ??? 總之,每一個finally語句塊都應該正常結束,除非拋出不受檢查的異常。千萬不要用return,break,continue或throw來退出finally語句塊,并且千萬不要允許讓受檢查的異常傳播到finally語句塊之外。

          posted on 2006-06-06 10:29 藍色Saga 閱讀(144) 評論(0)  編輯  收藏 所屬分類: 希哈爪哇

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


          網站導航:
           
          主站蜘蛛池模板: 保康县| 安吉县| 长治市| 福安市| 贵德县| 建平县| 顺义区| 政和县| 芦山县| 含山县| 赣榆县| 松阳县| 溧阳市| 西丰县| 视频| 永登县| 嘉黎县| 胶州市| 新巴尔虎右旗| 隆子县| 双峰县| 望都县| 贵定县| 安吉县| 荆州市| 镇沅| 定南县| 五峰| 安达市| 永州市| 邯郸市| 东源县| 汽车| 时尚| 鄂尔多斯市| 台州市| 阳春市| 平南县| 利川市| 神农架林区| 景德镇市|