Java的自定義異常類
11.7.1 編寫自定義異常類的模式
編寫自定義異常類實際上是繼承一個API標準異常類,用新定義的異常處理資訊覆蓋原有資訊的過程。常用的編寫自定義異常類的模式如下:
public class CustomException extends Exception { //或者繼承任何標準異常類
public CustomException() {} //用來建立無引數物件
public CustomException(String message) { //用來建立指定引數物件
super(message); //呼叫超類構造器
}
}
當然也可選用Throwable作為超類。其中無引數構造器為建立預設引數物件提供了方便。第二個構造器將在建立這個異常物件時提供描述這個異常資訊的字串,通過呼叫超類構造器向上傳遞給超類,對超類中的toString()方法中返回的原有資訊進行覆蓋。
來討論一個具體例子。假設程式中需要驗證使用者輸入的表示年齡的資料必須是正整數值。我們可以按照以上模式編寫這個自定義異常類如下:
public class NegativeAgeException extends Exception {
//或者:extends Throwable
public NegativeAgeException() {}
public NegativeAgeException(String message) {
super(message);
}
}
下面是應用這個自定義異常類的例子:
//完整程式存在本書配套資源目錄為Ch11中名為NegativeAgeExceptionTest.java
...
try{
String ageString = JOptionPane.showInputDialog("Enter your age: ");
if (Integer.parseInt(ageString) < 0)
throw new NegativeAgeException("Please enter a positive age");
else
JOptionPane.showMessageDialog(null, ageString, "Age", 1);
}
catch(NegativeAgeException e){
System.out.println(e);
}
...
或者,可以建立一個預設物件,然後在catch中列印具體資訊,如:
throw new NegativeAgeException();
...
catch (NegativeAgeException e) {
System.out.println("Please enter a positive age");
將產生與第一個例子相同的效果。
11.7.2 自定義異常處理
無論是利用標準API異常類來處理特殊的異常,或者編寫自定義的異常類來達到同樣目的,問題的關鍵是:
<!--[if !supportLists]-->1.<span style="font: 7pt " times="" new="" roman';="" none;="" normal;="" none"=""> <!--[endif]-->當這個異常發生時,如何及時捕獲這個異常。
<!--[if !supportLists]-->2.<span style="font: 7pt " times="" new="" roman';="" none;="" normal;="" none"=""> <!--[endif]-->捕獲這個異常後,如何產生精確的異常處理資訊。
毋庸置疑,我們不可能期待JVM自動丟擲一個自定義異常,也不能夠期待JVM會自動處理一個自定義異常。發現異常、丟擲異常以及處理異常的工作必須靠程式設計人員在程式碼中利用異常處理機制自己完成。
一般情況下,發現和丟擲一個自定義異常通過在try程式塊中利用if和throw語句完成,即:
try {
...
if (someExceptionConditon == true) {
throw new CustomException("A custom exception xxx occurred. Please
check your entry...")
...
}
catch (CustomException e) {
...
}
而列印異常處理資訊可以在丟擲時包括在構造器的引數中,或者包括在處理這個異常的catch中。
另外應該注意在自定義異常發生之前,有可能產生標準異常的情況。例如,在一個需要驗證年齡必須是正整數值的程式中,利用自定義異常類,如NegativeAgeException,驗證輸入的年齡是否正整數,即:
try {
...
if (Integer.parseInt(ageString) < 0)
throw NegativeAgeException("Please enter a positive age");
else
...
}
catch (NumberFormatException e) {
System.out.println(e);
}
catch (NegativeAgeException e) {
System.out.println(e);
}
...
注意在這個程式碼中,如果ageString是非法整數字符串,如“25ab”,系統將首先丟擲NumberFormatException,而不會執行throw NegativeAgeException("Please enter a positive age")。所以應該在catch中加入對NumberFormatException的處理,如以上程式碼所
相關文章
- 自定義異常類
- Java 異常(二) 自定義異常Java
- Java自定義異常Java
- Java之自定義異常Java
- C#中自定義異常類C#
- 自定義異常
- 自定義異常三
- Java自定義異常的建立及多層呼叫Java
- Java學習筆記之自定義異常Java筆記
- restframework 異常處理及自定義異常RESTFramework
- 異常-自定義異常的實現和測試
- Java異常處理的兩種方式以及自定義異常的使用方法Java
- 自定義PL/SQL異常SQL
- Oracle自定義異常的使用薦Oracle
- 用列舉來處理java自定義異常Java
- springboot自定義異常Spring Boot
- 使用者自定義異常
- C#規範整理·異常與自定義異常C#
- python自定義異常,使用raise引發異常PythonAI
- C#自定義異常 統一異常處理C#
- 【Django】DRF自定義異常處理Django
- Java入門自定義異常&模擬借書系統Java
- java培訓教程分享:Java中使用者如何自定義異常?Java
- java自定義異常例項1Java
- 自定義UDF函式應用異常函式
- 物件導向 約束、自定義異常、加密物件加密
- 2024.10.11(自定義異常)
- Java基礎 ---Throwable異常類Java
- Dubbo 自定義異常,你是怎麼處理的?
- 關於Java異常的分類示例Java
- Spring Cloud Gateway-自定義異常處理SpringCloudGateway
- 巧解C#單例模式引起的自定義異常C#單例模式
- 關於SAVEPOINT和自定義異常使用的一點看法
- JAVA類檔案操作和異常Java
- springboot下新增全域性異常處理和自定義異常處理Spring Boot
- Java自定義一個字典類(Dictionary)Java
- SpringBoot系列——自定義統一異常處理Spring Boot
- Spring Cloud Gateway自定義異常處理Exception HandlerSpringCloudGatewayException