簡體   English   中英

Java與內置異常中拋出自定義異常

[英]Throwing custom exceptions in Java versus built in exceptions

我有些困惑,因為我希望能夠在Java中引發自定義異常。 為此,我必須在函數的頭中添加throws MyException

然后,任何依次調用該函數的函數都必須添加throws MyException或具有try-catch塊。 但為什么會這樣呢?

例如,當在Java中創建一個Stack並調用pop函數時,我不必具有try-catch,但是如果不存在Java語言,則Java中的pop方法會拋出NoSuchElementException (或者是)。堆棧上的元素。

NoSuchElementExceptionRuntimeException (未經檢查的異常),我們不需要處理或聲明RuntimeException S,因此編譯器不會抱怨,而是在運行時拋出它。

在檢查的異常,即,所有這一切都沒有亞型的例外情況RuntimeException ,編譯器會檢查是否有合適的catch條款,從而使程序繼續執行過程中,執行中的操作后, catch ; 為此,您需要使用try/catch塊處理它們或使用throws子句聲明它們 - 將處理異常的責任委托給更高級的調用鏈。 如果您的自定義異常不是RuntimeException檢查的異常規則也適用於您的自定義異常。

檢查異常--->由編譯器強制處理或傳播

未檢查的異常--->編譯器未檢查因此在運行時出現

Java有所謂的檢查異常和非檢查異常。 必須在方法簽名中聲明已檢查的異常,而無需聲明未檢查的異常。

如果要定義未檢查的異常,則可以從由Exception插入的RuntimeException派生它。

你應該拋出或嘗試捕獲所有已檢查的異常,它不是RunTimeException必需的,而你所討論的異常是一個RuntimeException

請參閱我對這個問題的回答。

作為一般的經驗法則,在決定是否創建自定義異常類時,我嘗試盡可能多地使用內置異常類,這樣做有意義,例如IllegalArgumentException等。

這是一個如何創建自定義RuntimeException的示例,正​​如您所發現的那樣,它將不需要try/catch/finally塊或throws子句。

public class MyRuntimeException extends RuntimeException {
    public MyRuntimeException() {
        super();
    }

    public MyRuntimeException(String message) {
        super(message);
    }
}

public class MyClass {
    public void go(int val) {
        if(val <= 0) throw new MyRuntimeException("Val must be greater than 0.");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM