finally塊中不允許使用return,continue或break的原因

          一個try塊可以不執行finally子句就能夠退出的唯一方法是通過調用System.exit()方法來實現的。

          如果控制因為一個return,continue或break指令離開這個try塊,那么finally塊會在控制轉移到它的新的目標代碼之前執行.

          也就是說如果在finally塊中使用return,continue或break,則會把拋出的異常吃掉。

          同理:如果在finally塊中使用throw或代碼有問題拋出異常,也會吃掉原始的異常,不過因為此時能夠拋出新的異常,可以跟蹤,也就不是問題了。


          package test;

          public class TryTest {
              public static void main(String[] args) {
                  try {
                      TryTest tryTest = new TryTest();
                      System.out.println(tryTest.test());
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }

              public boolean test() throws Exception {
                  try {
                      throw new Exception("Something error");// 1.拋出異常
                  } catch (Exception e) {// 2.捕獲的異常匹配(聲明類或其父類),進入控制塊
                      throw e;// 3. throw前控制轉移到finally塊,執行完后再返回
                  } finally {
                      return true;// 4. 控制轉移,直接返回,不再返回catch塊,吃掉了異常
                  }
              }
          }

          打印結果為true,main方法捕獲不到異常。
          本文章轉載于http://blog.javaresearch.org/page/zhouxianli


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


          網站導航:
           

          posts - 1, comments - 0, trackbacks - 0, articles - 1

          Copyright © SoLo日記

          主站蜘蛛池模板: 柯坪县| 濉溪县| 佛坪县| 淄博市| 古蔺县| 永吉县| 西畴县| 阿鲁科尔沁旗| 孟连| 建阳市| 平原县| 景泰县| 奉新县| 泰安市| 南靖县| 南乐县| 丹江口市| 阳东县| 永兴县| 富顺县| 孝昌县| 屯留县| 集贤县| 沙河市| 内丘县| 岑溪市| 涟水县| 周至县| 中方县| 石城县| 丘北县| 涞水县| 尼玛县| 团风县| 遂平县| 西城区| 西乌珠穆沁旗| 东乡族自治县| 安顺市| 华池县| 台安县|