2009-07-01 124 views
46

如何創建與預製類型不同的新Exception如何編寫自定義例外?

public class InvalidBankFeeAmountException extends Exception{ 
    public InvalidBankFeeAmountException(String message){ 
     super(message); 
    } 
} 

它會顯示爲InvalidBankFeeAmountException這是寫在第一行的警告。

+0

我自己創建了一個Exception,如上所示。使用該特殊異常的名稱創建一個類並擴展Exception。 但是 它有以下警告:該異常的可序列化類<名稱>異常沒有聲明long的靜態最終serialVersionUID字段。 我該如何解決它? – Johanna 2009-07-01 19:57:18

+1

如果你不想擔心這個警告,你不必擔心。因爲Exception類是可序列化的,所以它需要你爲這個類設置一個序列號。但是,既然這只是一個警告,我通常會忽略它。 – jjnguy 2009-07-01 20:01:22

回答

103

所有你需要做的就是創建一個新的class並擁有它extend Exception

如果你想要一個未被選中的Exception,你需要extend RuntimeException

注意:一個檢查Exception是一個需要你要麼環繞Exceptiontry/catch塊或對方法聲明中的「throws」條款。 (如IOException)未勾選Exceptions可能與選中Exceptions一樣被拋出,但您不需要以任何方式明確處理它們(IndexOutOfBoundsException)。

例如:

public class MyNewException extends RuntimeException { 

    public MyNewException(){ 
     super(); 
    } 

    public MyNewException(String message){ 
     super(message); 
    } 
} 
31

只是延長要麼

  • Exception,如果你想檢查你的異常(即:在需要throws子句)
  • RuntimeException,如果你想你的例外是未經檢查的。
3

看看:

http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html?page=1

給出一個例子存在第2頁:與時和一套準則沿着

public class DuplicateUsernameException 
    extends Exception { 
    public DuplicateUsernameException 
     (String username){....} 
    public String requestedUsername(){...} 
    public String[] availableNames(){...} 
} 

爲什麼你會創建你自己的例外。

3

請務必避免出現異常情況,特別是檢查到的異常情況。我建議閱讀Joshua Bloch的Effective Java第9章​​,特別是他的第60項(贊成使用標準例外)。他的建議還包括對可從中恢復的異常使用經過檢查的異常,使用未經檢查的異常(RuntimeExceptions)進行編程錯誤,並避免不必要地使用已檢查的異常。

如果在發現編程錯誤時拋出InvalidBankAccount異常,那麼您可能只想引發標準的未經檢查的Java IllegalStateException。 (這整齊地迴避了聲明serialVersionUID的需要。)