優(yōu)柔寡斷

          Posted on 2006-06-27 17:01 多力宇揚 閱讀(201) 評論(0)  編輯  收藏 所屬分類: Core Java

          下面這個可憐的小程序并不能干脆的做決定。它的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。如果你嘗試一下,就會發(fā)現(xiàn)它
          編譯時沒有任何錯誤,并且它打印的是false。為什么呢?
          ??? 原因在于就是在:在一個try-finally語句中,finally語句塊總是在控制權(quán)離開try語句塊時執(zhí)行。無論try
          語句塊是正常結(jié)束的,還是意外結(jié)束,情況都是如此。在一條語句或一個語句塊拋出一個異常,或者對某個封閉類型語句執(zhí)行了一個break或continue,或是像這個程序一樣執(zhí)行了一個return時,將發(fā)生意外結(jié)束。之所以稱為意外結(jié)束,是因為它們阻止程序按順序執(zhí)行下面的語句。
          ??? 當try語句塊和finally語句塊都意外結(jié)束時,在try語句塊中引發(fā)意外結(jié)束的原因?qū)⒈粊G棄,而整個try-finally
          語句意外結(jié)束的原因?qū)⑴cfinally語句塊意外結(jié)束的原因相同。在這個程序中,在try語句塊中的return語句所
          引發(fā)的意外結(jié)束將被丟棄,而try-finally語句意外結(jié)束是由finally語句塊中的return造成的。簡單的講,程序
          嘗試著(try)返回(return)true,但是它最終(finally)返回(return)的是false。
          ??? 總之,每一個finally語句塊都應(yīng)該正常結(jié)束,除非拋出不受檢查的異常。千萬不要用return,break,continue或throw來退出finally語句塊,并且千萬不要允許讓受檢查的異常傳播到finally語句塊之外。

          主站蜘蛛池模板: 华阴市| 安顺市| 平罗县| 射阳县| 福贡县| 肃宁县| 平顶山市| 沈丘县| 视频| 连城县| 梓潼县| 离岛区| 通河县| 龙州县| 永福县| 札达县| 新和县| 渭南市| 宜良县| 古丈县| 新建县| 兴国县| 张家港市| 朝阳县| 台北县| 水城县| 福清市| 杭锦后旗| 高陵县| 清水河县| 太白县| 潞城市| 岳阳县| 婺源县| 治多县| 兴和县| 安福县| 许昌县| 宝鸡市| 乡城县| 高尔夫|