如何编写和应用Java的自定义异常类
生活随笔
收集整理的這篇文章主要介紹了
如何编写和应用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異常類來處理特殊的異常,或者編寫自定義的異常類來達到同樣目的,問題的關鍵是: 1.?????????當這個異常發生時,如何及時捕獲這個異常。 2.?????????捕獲這個異常后,如何產生精確的異常處理信息。 ???????毋庸置疑,我們不可能期待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的處理,如以上代碼所示。?
本文轉自高永強51CTO博客,原文鏈接:?
http://blog.51cto.com/yqgao/174767,如需轉載請自行聯系原作者總結
以上是生活随笔為你收集整理的如何编写和应用Java的自定义异常类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: getaddrinfo(localhos
- 下一篇: 最详细的CISCO路由器配置命令及方法