Java 之 自定義異常


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

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

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

2、什么是自定義異常類

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

3、異常類如何定義

  (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 }
View Code

 


免責聲明!

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



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