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

來源:互聯網
上載者:User
一個try塊可以不執行finally子句就能夠退出的唯一方法是通過調用System.exit()方法來實現的。

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

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

package test;

public class TryTest {
    public static void main(String[] args) {
        try {
            System.out.println(TryTest.test());// 返回結果為true其沒有任何異常
        } catch (Exception e) {
            System.out.println("Exception from main");
            e.printStackTrace();
        }
    }

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.