1.12 声明自定义异常
如果 Java 提供的內置異常類型不能滿足程序設計的需求,這時我們可以自己設計 Java 類庫或框架,其中包括異常類型。
- 實現自定義異常類需要繼承 Exception 類或其子類,
- 自定義運行時異常類需繼承 RuntimeException 類或其子類。
- 寫一個檢查性異常類,則需要繼承 Exception 類。
自定義異常的語法形式為:
<class><自定義異常名><extends><Exception>在編碼規范上,一般將自定義異常類的類名命名為 XXXException,其中 XXX 用來代表該異常的作用。
自定義異常類一般包含兩個構造方法:一個是無參的默認構造方法,另一個構造方法以字符串的形式接收一個定制的異常消息,并將該消息傳遞給超類的構造方法。
例如,以下代碼創建一個名稱為 IntegerRangeException 的自定義異常類:
class IntegerRangeException extends Exception {public IntegerRangeException() {super();}public IntegerRangeException(String s) {super(s);} }以上代碼創建的自定義異常類 IntegerRangeException 類繼承自 Exception 類,在該類中包含兩個構造方法。
例 1
編寫一個程序,對會員注冊時的年齡進行驗證,即檢測是否在 0~100 歲。
1)這里創建了一個異常類 MyException,并提供兩個構造方法。MyException 類的實現代碼如下:
public class MyException extends Exception {public MyException() {super();}public MyException(String str) {super(str);} }2)接著創建測試類,調用自定義異常類。代碼實現如下:
import java.util.InputMismatchException; import java.util.Scanner; public class Test {public static void main(String[] args) {int age;Scanner input = new Scanner(System.in);System.out.println("請輸入您的年齡:");try {age = input.nextInt(); // 獲取年齡if(age < 0) {throw new MyException("您輸入的年齡為負數!輸入有誤!");} else if(age > 100) {throw new MyException("您輸入的年齡大于100!輸入有誤!");} else {System.out.println("您的年齡為:"+age);}} catch(InputMismatchException e1) {System.out.println("輸入的年齡不是數字!");} catch(MyException e2) {System.out.println(e2.getMessage());}} }3)運行該程序,當用戶輸入的年齡為負數時,則拋出 MyException 自定義異常,執行第二個 catch 語句塊中的代碼,打印出異常信息。程序的運行結果如下所示。
請輸入您的年齡: -2 您輸入的年齡為負數!輸入有誤!當用戶輸入的年齡大于 100 時,也會拋出 MyException 自定義異常,同樣會執行第二個 catch 語句塊中的代碼,打印出異常信息,如下所示。
請輸入您的年齡: 110 您輸入的年齡大于100!輸入有誤!在該程序的主方法中,使用了 if…else if…else 語句結構判斷用戶輸入的年齡是否為負數和大于 100 的數,如果是,則拋出自定義異常 MyException,調用自定義異常類 MyException 中的含有一個 String 類型的構造方法。在 catch 語句塊中捕獲該異常,并調用 getMessage() 方法輸出異常信息。
提示:因為自定義異常繼承自 Exception 類,因此自定義異常類中包含父類所有的屬性和方法。
例2:
public class Person {String name;String sex;public Person(String name,String sex){this.name=name;this.sex=sex;} } public class ZaoTangZi {public void man(Person P) throws SexException{if(P.sex=="男"){System.out.println("歡迎進入基佬澡堂");}else{//需要拋出一個異常throw new SexException("女的,錯誤!出去");}} } public class SexException extends Exception {//自己定義的異常必須要繼承Exception或RuntimeExceptionpublic SexException(String msg){super(msg);//調用父類的構造方法,Exception(msg)} } public class Test {public static void main(String[] args) throws SexException {Person p1=new Person("李一","男");Person p2=new Person("李花","女");ZaoTangZi z=new ZaoTangZi();z.man(p2);} }總結
以上是生活随笔為你收集整理的1.12 声明自定义异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.11 多异常捕获
- 下一篇: 1.14 实例:完善除法运算的错误信息