java之自定義異常
阿新 • • 發佈:2021-01-17
概述:根據自己業務的異常情況來定義異常類
異常類如何定義:
1、定義一個編譯期異常:自定義類並繼承於java.lang.Exception
2、自定義一個執行期異常類:自定義類並繼承java.lang.RuntimeException
格式:
public class XXXException extend Exception/RuntimeException{
新增一個空參的構造方法
新增一個帶異常資訊的構造方法
}
注意:
1、自定義異常類一般都是以Exception結尾,說明該類是一個異常類
2、自定義異常類,必須繼承Exception或者RuntimeException
Exception:是編譯期異常,如果方法內部出了該異常就必須處理
RuntimeException:是執行期異常,無需處理,給JVM
通過檢視原始碼發現:所有的異常類都會有一個帶異常資訊的構造方法,方法內部會呼叫父類帶異常資訊的構造方法,讓父類來處理這個異常資訊
演示:
異常類:
演示: 異常類: public class RegisterException extends RuntimeException/Exception{ 空參 public RegisterException(){ super(); } 帶參 public RegisterException(String message) { super(message); } } 使用:編譯期異常 static String[] usernames = {"張三", "李四", "王五"}; public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("請輸入使用者名稱"); String name = sc.next(); checkUsername(name); } public static void checkUsername(String name) { for (String username : usernames) { if (name.equals(username)) try {//這裡可以直接throws,讓main方法來try-catch throw new RegisterException("該使用者被註冊"); } catch (RegisterException e) { e.printStackTrace(); return;//結束方法 } } System.out.println("恭喜註冊成功"); } 執行期異常checkUsername方法中不用處理異常 public static void checkUsername(String name) { for (String username : usernames) { if (name.equals(username)) throw new RegisterException("該使用者被註冊"); } System.out.println("恭喜註冊成功"); }
效果: