我們如何在Java中創建自定義異常?如何在Java中創建自定義異常?
回答
要定義檢查例外您創建的java.lang.Exception
一個子類(或子類的層次)。例如:
public class FooException extends Exception {
public FooException() { super(); }
public FooException(String message) { super(message); }
public FooException(String message, Throwable cause) { super(message, cause); }
public FooException(Throwable cause) { super(cause); }
}
中的方法有可能拋出或傳播此異常也必須進行申報:
public void calculate(int i) throws FooException, IOException;
...和代碼調用此方法必須自行處理或傳播此異常(或兩者):
try {
int i = 5;
myObject.calculate(5);
} catch(FooException ex) {
// Print error and terminate application.
ex.printStackTrace();
System.exit(1);
} catch(IOException ex) {
// Rethrow as FooException.
throw new FooException(ex);
}
你會在上面的例子IOException
被捕獲並重新拋出的FooException
通知。這是用於封裝異常(通常在實現API時)的常用技術。
有時會出現您不希望強制每種方法在其throws子句中聲明您的異常實現的情況。在這種情況下,您可以創建一個未檢查的異常。一個未經檢查的異常是延伸java.lang.RuntimeException
(其本身是java.lang.Exception
子類)的任何異常:
public class FooRuntimeException extends RuntimeException {
...
}
方法可以拋出或傳播FooRuntimeException
例外不宣它;例如
public void calculate(int i) {
if (i < 0) {
throw new FooRuntimeException("i < 0: " + i);
}
}
未檢查異常通常用於表示一個程序員錯誤,例如通過一個無效參數的方法或企圖觸犯數組索引邊界。
java.lang.Throwable
類是可以在Java中引發的所有錯誤和異常的根。 java.lang.Exception
和java.lang.Error
都是Throwable
的子類。任何小類Throwable
可能會被拋出或被捕獲。但是,捕獲或拋出Error
通常是不好的做法,因爲它用於表示JVM內部的錯誤,通常不會由程序員「處理」(例如OutOfMemoryError
)。同樣,你應該避免捕獲Throwable
,這可能導致你除了Exception
s之外還捕獲Error
s。
對於檢查的異常:
public class MyCustomException extends Exception { }
從技術上講,任何擴展Throwable
可以是一個拋出,但讓他們基於所檢查異常(RuntimeException的除外或者類異常一般是Exception
類的擴展它不會被檢查),而不是其他常見類型的可拋出的,它們通常不是被設計爲在JVM內部之外被優雅處理的東西。
您也可以使異常非公開,但您只能在定義它們的包中使用它們,而不是跨包。
至於投擲/捕獲自定義異常,它的工作原理就像內置的 - 通過
throw new MyCustomException()
扔,並通過
catch (MyCustomException e) { }
RuntimeException擴展了異常,而不是檢查的異常。 – Adamski
從技術上講,任何延伸'Throwable'的東西都可以*拋出*;異常擴展了'Exception'。 Throwable的自定義子類不會被try {...} catch(Exception e){...}塊攔截。 –
爲什麼人們喜歡這個答案?它包含一些不準確的地方。 1)因爲它是一個接口,所以你不能* implmenet * throwable。 2)任何*擴展* Throwable是**不是**異常('錯誤'不是一個例外,這是一個錯誤)。 3)它意味着Exception的任何子類都被檢查,而RuntimeException不是。 Adamski給出的答案要準確得多! –
public class MyException extends Exception {
// special exception code goes here
}
把它捉住爲:
throw new MyException ("Something happened")
Catch as:
catch (MyException e)
{
// something
}
- 1. CakePHP - 如何創建自定義異常?
- 2. 創建自定義異常
- 3. Java異常NullPointerException在自定義異常
- 4. 如何在Java中創建選中/未選中的自定義異常?
- 5. 如何在c中創建自定義異常#
- 6. CodeIgniter創建新的自定義異常
- 7. 自定義異常在Java中
- 8. Java自定義異常
- 9. Java自定義異常類
- 10. 如何在Java中定製自定義異常?
- 11. Java:創建自定義的異常類package.Exception
- 12. 創建自定義異常或使用內置異常?
- 13. 在Java中拋出自定義異常與在異常中拋出異常
- 14. 如何創建一個自定義的C#異常?
- 15. 如何創建軌道3個自定義異常
- 16. 關於java中的自定義異常
- 17. Java中自定義異常的問題
- 18. 如何在Java中拋出自定義塊異常
- 19. 如何在flex中使用自定義Java異常?
- 20. Java自定義異常:包約定?
- 21. 如何在Struts2中創建自定義的異常處理程序類
- 22. 如何在C擴展中創建自定義Python異常類型?
- 23. 如何在django中爲on_delete = models.PROTECT創建自定義異常消息
- 24. 如何在Haskell中定義自定義異常?
- 25. 如何在express-validator中創建自定義異步驗證器?
- 26. 用C#中的自定義構造函數創建異常#
- 27. 如何在自定義類中創建自定義IBActions?
- 28. 如何創建自定義預定義的常量?
- 29. Java自定義異常處理
- 30. 無法處理自定義異常Java
這與大多數OO語言使用的方法相同:擴展基本Exception類。 – NDM
檢查出http://stackoverflow.com/questions/1070590/how-can-i-write-an-exception-by-myself – demongolem