Java 例外とカスタム例外の例

異常な

1. 異常背景
よくある異常
例えば
分母が0

System.out.println(10/0);

//执行结果
Excecption in thread"main" java.lang.ArithmeticException:/by zero

配列の添字が範囲外です

    int []a={
    
    1,2,3};
    System.out.println(a[100]);
//执行结果
Exception in thread "main" java.lang.NullpointerException

例外とは、実行時にエラーが発生した場合に呼び出し元に通知する仕組みです。コーディング中にコンパイル エラーが発生した場合、コンパイラはコード作成中に警告を発します。この 2 つの状況には違いがあります

「ランタイム」プログラムはクラス ファイルを取得するためにコンパイルされていますが、JVM の実行中にエラーが発生します。

防御的プログラミング
LBYL : Look Before You Leap. 手術前に「雨の日に備えて」、何が起こるかを完全にチェックする
EAFP : 許可よりも許しを求める方が簡単です。最初に実行し、何か問題が発生した場合は後で修正します

2. 例外の基本的な使い方
例外をキャッチするための基本的な文法

try{
    
    
有可能出现异常的语句;
}[catch (异常类型 异常对象)]{
    
    
}...]
[finally{
    
    
异常的出口
}]

try コードブロック内のコードは例外が発生する可能性のあるコードです。catch
コードブロック内のコードは例外発生後の処理動作です。fina
コードブロック内のコードはその後の処理に使用され、実行されます。 catchとfinallyの
両方を状況に応じて選択できます。

3. 例外処理の流れ
プログラムは、まず try のコードを実行し、
try のコードが異常であれば try のコードを終了し、catch の例外の種類と一致するかどうかを確認し、
一致する例外の種類があれば、 catch のコードが実行されます。
一致する例外タイプが見つからない場合、例外は上位レベルの呼び出し元に渡されます。
一致する例外タイプが見つかったかどうかに関係なく、最終的に のコードが実行されます (キャッチの前に実行されます)。メソッドの終わり)
上位レベルの呼び出し元が例外を処理しない場合 例外が発生した場合、メイン メソッドに例外を処理する適切なコードがなくなるまで例外は渡され続け
、例外は JVM に渡されます処理のため、プログラムはこの時点で異常終了します。

4. 例外のスロー
場合によっては、コーディングのニーズに応じて手動で例外をスローし、throw キーワードを使用してこの操作を完了することもできます。

public static void main(String[] aegs)
{
    
    
	System.out.println(divide(10,0));
}
public static int divide(int x,int y)
{
    
    
	if(y==0){
    
    
	throw new ArithmeticException("抛出0异常");
	}
	return x/y;
}

5. Java 例外のシステム。
ここに画像の説明を挿入
エラーとは、Java ランタイムの内部エラーであるリソース枯渇エラーを指します。アプリケーションはそのような例外をスローしません。このような内部エラーが発生すると、ユーザーに通知する以外に方法はありません。その他の処理メソッド
Exceotion は、プログラマが使用する例外クラスの親クラスです。

6. カスタム例外クラス

import java.util.Scanner;

class UserError extends Exception{
    
    
    public UserError(String message){
    
    
        super(message);
    }
}

class PasswordError extends Exception{
    
    
    public PasswordError(String message)
    {
    
    
        super(message);
    }
}

public class Test{
    
    
    private static String username="admin";
    private static String password="123456";

    public void login(String userName,String passWord)throws UserError,PasswordError{
    
    
        if(!Test.username.equals(userName))
        {
    
    
            throw new UserError("用户名错误");
        }
            if(!Test.password.equals(passWord))
            {
    
    
                throw new PasswordError("密码错误");
            }

            System.out.println("登录成功!");
        }


public static void main(String[] args)
{
    
    
    Scanner sc=new Scanner(System.in);
    while (sc.hasNextLine())
    {
    
    
        String name=sc.nextLine();
        String num=sc.nextLine();

    try
    {
    
    
        Test test1=new Test();
        test1.login(name,num);
    }catch(UserError userError){
    
    
        userError.printStackTrace();
    }
    catch(PasswordError passwordError)
    {
    
    
        passwordError.printStackTrace();
    }
}

}
}

この例は、カスタム例外の内容を強調した単純なログイン システムです。ユーザー名不一致例外とパスワード不一致例外の 2 種類の例外がカスタマイズされています。

try catch ステートメントを使用して、起こり得る異常事態を事前に予測し、キー ログイン関数でユーザー名とパスワードのパラメーターを渡し、try 後のステートメントで事前に定義したパラメーターと比較し、使用するかどうかを決定します。 catch内のステートメントを実行し、最終的にカスタム例外をスローする機能を実現しますここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_45742383/article/details/114266329