カスタム例外:
Java が提供する例外クラスだけでは使用できません。いくつかの例外クラスを自分で定義する必要があります。
フォーマット:
public class XXException extends Exception|RuntimeException{
空のパラメータを持つコンストラクタを追加する
例外情報を含むコンストラクターを追加する
}
知らせ:
1. カスタム例外クラスは通常、Exception で終わり、クラスが例外クラスであることを示します。
2. カスタム例外クラスは Exception または RuntimeException を継承する必要があります。
例外の継承: カスタム例外クラスはコンパイル時例外です。コンパイル時例外が発生した場合は、スローするかキャッチを試みて処理する必要があります。
Inherit RuntimeException: カスタム例外は、処理する必要のないランタイム例外であり、処理および割り込み処理のために仮想マシンに渡されます。
演習: ユーザー操作をシミュレートします。ユーザーがすでに存在する場合はエラーが表示され、存在しない場合は成功が表示されます。
分析します:
1. 登録したユーザー名(データベース)を配列で保存する
2. スキャナを使用して、ユーザーが入力した登録ユーザー名を取得します(フロントエンド、ページ)
3. ユーザーが入力したユーザー名の判定方法を定義する
登録されたユーザー名の配列を走査して各ユーザー名を取得します
取得したユーザー名を使用して、ユーザーが入力したユーザー名と比較します。
真実:
ユーザー名はすでに存在しており、RegisterException がスローされ、ユーザーに「このユーザー名はすでに登録されています」と通知されます。
間違い:
配列の反復処理を続ける
ループが終了し、重複するユーザー名が見つからない場合は、ユーザーに「おめでとうございます。登録は成功しました!」というプロンプトが表示されます。
カスタム MyException クラス
Exception インターフェイスを拡張し、出力ステートメントをカスタマイズできます
package test;
import java.util.Scanner;
public class MyException extends Exception{
//添加一个空参数的构造方法
public MyException() {
super();
}
//添加一个带异常信息的构造方法
//查看源码发现,所有异常类都会有一个带异常信息的构造方法,方法内部调用父类异常信息的构造方法,
//让父类处理
public MyException(String message){
super(message);
}
}
package test;
import java.util.Scanner;
public class DemoMyException {
static String[] s = {"张三","李四","王五"};
public static void main(String[] args) throws Exception{
System.out.println("请输入用户名:");
Scanner sc = new Scanner(System.in);
String user = sc.next();
checkName(user);
}
public static void checkName(String username) throws MyException{
for(String name: s){
if(username.equals(name)){
throw new MyException("亲,该用户名已经被注册了!");
}
}
System.out.println("恭喜您,注册成功!");
}
}
ここでは Exception コンパイル例外があるため、処理する必要があるため、checkName の元の MyException クラスに throw をスローして処理します。
2. Extends runtimeException の場合は、次の図に示すように、スローせずに JVM によって直接処理できます。