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日記

          主站蜘蛛池模板: 高安市| 杂多县| 太白县| 安义县| 丰顺县| 凤阳县| 花垣县| 平利县| 商南县| 房产| 科技| 含山县| 莱阳市| 平度市| 永州市| 封开县| 德保县| 泉州市| 株洲县| 松滋市| 广河县| 沂南县| 平定县| 铜川市| 衡山县| 巍山| 辉县市| 酒泉市| 禹州市| 西和县| 福建省| 武山县| 古田县| 梁平县| 木里| 台南市| 依安县| 阜宁县| 新乡县| 湖北省| 泽州县|