Java 異常處理:自定義異常


一、為什么要自定義異常類

  1、為什么要自定義異常類

   Java中不同的異常類,分別表示着某一種具體的異常情況,那么在開發中總是有些異常情況是沒有定義好的,此時我們根據自己業務的異常情況來定義異常類。

     一些異常都是 Java 內部定義好的,但是實際開發中也會出現很多異常,這些異常很可能在JDK中沒有定義過,例如年齡負數問題,考試成績負數問題,這時就需要我們自定義異常。 

  2、什么是自定義異常類

    在開發中根據自己業務的異常情況來定義異常類。

二、異常類如何自定義

  1、如何自定義

    ① 一般地,用戶自定義異常類都是 RuntimeException 的子類

    ② 自定義異常類通常需要編寫幾個重載的構造器

    ③ 自定義異常需要提供 serialVersionID

    ④ 自定義的異常通過 throw 拋出

    ⑤ 自定義異常最重要的是異常類的名字,當異常出現時,可以根據名字判斷異常類型;

  2、案例

  (1)自定義一個編譯器異常:自定義類 並繼承 java.lang.Exception

  (2)自定義一個運行時期的異常類:自定義類,並繼承於 java.lang.RuntimeException。

  建議:保留兩種構造器的形式

    ①無參構造

    ②帶給父類的message屬性賦值的構造器

  語法格式

 public class XXXExcepiton extends Exception | RuntimeException{
         添加一個空參數的構造方法
         添加一個帶異常信息的構造方法
 }

  注意:

  (1)自定義異常類一般都是以Exception結尾,說明該類是一個異常類

  (2)自定義異常類,必須的繼承Exception或者RuntimeException

      繼承Exception:那么自定義的異常類就是一個編譯期異常,如果方法內部拋出了編譯期異常,就必須處理這個異常,要么throws,要么try...catch

      繼承RuntimeException:那么自定義的異常類就是一個運行期異常,無需處理,交給虛擬機處理(中斷處理)

   Demo:

 1 public class DemoRegisterException {  2     // 1.使用數組保存已經注冊過的用戶名(數據庫)
 3     static String[] usernames = {"張三","李四","王五"};  4 
 5     public static void main(String[] args) /*throws RegisterException*/ {  6         //2.使用Scanner獲取用戶輸入的注冊的用戶名(前端,頁面)
 7         Scanner sc = new Scanner(System.in);  8         System.out.println("請輸入您要注冊的用戶名:");  9         String username = sc.next(); 10  checkUsername(username); 11 
12  } 13 
14     //3.定義一個方法,對用戶輸入的中注冊的用戶名進行判斷
15     public static void checkUsername(String username) /*throws RegisterException*/ { 16         //遍歷存儲已經注冊過用戶名的數組,獲取每一個用戶名
17         for (String name : usernames) { 18             //使用獲取到的用戶名和用戶輸入的用戶名比較
19             if(name.equals(username)){ 20                 //true:用戶名已經存在,拋出RegisterException異常,告知用戶"親,該用戶名已經被注冊";
21                 try { 22                     throw new RegisterException("親,該用戶名已經被注冊"); 23                 } catch (RegisterException e) { 24  e.printStackTrace(); 25                     return; //結束方法
26  } 27  } 28  } 29 
30         //如果循環結束了,還沒有找到重復的用戶名,提示用戶"恭喜您,注冊成功!";
31         System.out.println("恭喜您,注冊成功!"); 32  } 33 } 34 
35 // 異常類
36 public class RegisterException extends /*Exception*/ RuntimeException{ 37     //添加一個空參數的構造方法
38     public RegisterException(){ 39         super(); 40  } 41 
42     /*
43  添加一個帶異常信息的構造方法 44  查看源碼發現,所有的異常類都會有一個帶異常信息的構造方法,方法內部會調用父類帶異常信息的構造方法,讓父類來處理這個異常信息 45      */
46     public RegisterException(String message){ 47         super(message); 48  } 49 }

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM