高度な JAVA - 例外処理: プログラミングにおける予期せぬ状況の解釈と解決

目次

        1.0 例外とは何ですか?

        1.1 例外は主に実行時例外とコンパイル時例外の 2 つの状況に分けられます。

        2.0 で例外を処理するにはどうすればよいですか?

        2.1 例外のキャッチ

         2.2 例外の宣言

         3.0 カスタム例外

        3.1 例外クラスを定義するにはどうすればよいですか?

        3.2 カスタマイズされた実行例外

        3.3 カスタムコンパイルの例外

        3.4 投げと投げの違い 

        4.0 例外の魅力をさらに理解するには、例を使用します。


        1.0 例外とは何ですか?

        例外とは、プログラムの実行中に発生する予期しないまたは異常な状況です。例外は、プログラムが処理できないエラー、予期しない入力、またはその他の予期しない状況に遭遇したときにスローされます。これには、ゼロ除算、存在しない変数へのアクセス、ファイル読み取りエラーなどが含まれますが、これらに限定されません。例外はプログラムの通常の実行フローを中断し、例外をスローすることでプログラマまたはシステムに通知します。 簡単に言うと、プログラムに問題があるということです。

        1.1 例外は主に実行時例外とコンパイル時例外の 2 つの状況に分けられます。

        RuntimeException: RuntimeException から継承された例外クラスを指します。これらは、プログラムの実行中にスローされる可能性のある例外であり、通常はプログラム内の論理エラーまたはプログラムの間違った使用方法を示します。ランタイム例外は、メソッド シグネチャで宣言したりキャッチしたりする必要はありません。つまり、コンパイル エラーを発生させることなく、実行時例外をキャッチするかどうかを選択できます。

一般的な実行時例外には次のものがあります。

  1. NullPointerException (NullPointerException): Null オブジェクトのメンバーにアクセスしようとするとスローされます。
  2. IllegalArgumentException (不正なパラメータ例外): メソッドに渡されたパラメータが不正または無効な場合にスローされます。
  3. IllegalStateException (不正な状態の例外): オブジェクトの状態がメソッド呼び出しの前提条件を満たしていない場合にスローされます。
  4. IndexOutOfBoundsException (インデックス範囲外例外): 配列またはコレクションに存在しないインデックスにアクセスしようとするとスローされます。
  5. ArithmeticException (算術例外): ゼロによる除算またはその他の算術エラーが発生した場合にスローされます。

例外の実行は、コンパイル中にプログラマに「干渉」しないことを意味します。実行中に上記と同様の状況が発生した場合にのみ、例外が報告されます。

        異常な動作を説明する例を見てみましょう。

        IDEA コンパイラでコードをコンパイルするプロセスでは、例外が発生した場合に強力なプロンプトが表示されないことがわかります。

実行結果は次のとおりです。

        明らかに動作異常を示しています。

 

         コンパイル例外: コンパイル フェーズ中に発生する可能性があり、コード内で明示的に処理または宣言する必要がある例外を指します。これらは Exception を継承する例外クラスを参照します (RuntimeException ではありません)。 。実行時例外とは異なり、 コンパイル時例外はメソッド シグネチャで宣言するか、メソッド内でキャッチして処理する必要があります。そうしないと、コンパイル エラーが発生します。

一般的なコンパイル時の例外には次のものがあります。

  1. IOException (入出力例外): ファイル読み取りエラー、ネットワーク接続エラーなどの入出力エラーが発生した場合にスローされます。
  2. SQLException (SQL 例外): SQL 操作の実行時にデータベース接続エラー、SQL 構文エラーなどのエラーが発生した場合にスローされます。
  3. ClassNotFoundException (クラスが見つからない例外): 存在しないクラスをロードしようとするとスローされます。
  4. InterruptedException (中断例外): 待機中、スリープ中、またはブロック中にスレッドが中断された場合にスローされます。
  5. FileNotFoundException (ファイルが見つからない例外): 存在しないファイルにアクセスしようとするとスローされます。

 コンパイル例外とは、コードを記述するときに発生する例外を指し、プログラマは例外が解決される前にコードを処理する必要があります。

        コンパイル例外を説明する例を見てみましょう。

        1 つ目は、コードを作成するときに、IDEA コンパイラーは、この点が間違いやすいことをプログラマーに知らせるために、波線を示す強力なリマインダーを表示することです。 2 番目の点は、コンパイル例外を宣言またはキャプチャしない場合、プログラムは直接エラーを報告し、プログラムは実行されないということです。

例外を処理する具体的な方法については後述します。

        2.0 で例外を処理するにはどうすればよいですか?

        例外を処理するには、例外をキャッチする方法と例外を宣言する方法の 2 つがあります。

        2.1 捕获异常(Catch Exception

例外のキャッチ (例外のキャッチ): try-catchtry ブロックには例外をスローする可能性のあるコードが含まれており、catch ブロックには例外をキャッチして処理するために使用されます。例外をキャッチすると、例外によるプログラムの終了を防ぐことができ、例外を処理するメカニズムが提供されます。

import java.text.ParseException;
import java.util.Date;
import java.text.SimpleDateFormat;

public class CompilationException {
    public static void main(String[] args) {

        Date date = null;
        try {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String str = "2028-12-1 12:00:00";
            date = simpleDateFormat.parse(str);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        System.out.println(date);
    }
}

コンパイル例外は例外をキャッチすることで処理されます。さらに、ほとんどの場合、例外をキャッチしたり、通常の実行中の例外に対して例外処理を宣言したりする必要はありません。ただし、カスタマイズされた実行例外の場合は、例外を処理するために対応する措置を講じる必要があります。

 

         2.2 声明异常(Declare Exception

 例外の宣言 (例外の宣言) は、メソッド シグネチャでスローされる例外の種類の宣言です。メソッド宣言で throws キーワードを使用してスローされる可能性のある例外をリストすることにより、例外に対する責任を呼び出し元に移します。呼び出し元は、これらの例外を処理するか、宣言し続ける必要があります。そうしないと、コンパイル エラーが発生します。

import java.text.ParseException;
import java.util.Date;
import java.text.SimpleDateFormat;

public class CompilationException {
    public static void main(String[] args) throws ParseException {

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = "2028-12-1 12:00:00";
        Date date =  simpleDateFormat.parse(str);
        System.out.println(date);
    }
}

は、例外を宣言することでコンパイル例外を処理します。 throws キーワードを使用しました。

         3.0 カスタム例外

        カスタム例外は、特定のニーズとシナリオに基づいて独自に定義された例外クラスを指します。例外をカスタマイズすると、より具体的で読みやすい例外情報を提供できるため、開発者はプログラムでエラーが発生したときに問題をよりよく理解し、デバッグできるようになります。簡単に言うと、Java は世の中のすべての問題を表す例外クラスを提供することはできず、企業自身の問題を例外で表す場合は、Java 自身で例外クラスを定義する必要があります。

        3.1 例外クラスを定義するにはどうすればよいですか?

        例外には 2 種類あるため、アプローチは若干異なりますが、状況はほぼ同じです。

        3.2 カスタマイズされた実行例外

        最初にクラス継承を定義RuntimeExceptionし、次にパラメータを使用してコンストラクタを書き直し、最後に new を渡します。 クラスをカスタマイズし、コンストラクターで報告するエラー情報を渡し、キーワード throw を使用して、このオブジェクトから投げ捨てます。

コードは以下のように表示されます:

public class AgeAbnormalities extends RuntimeException{
    public AgeAbnormalities(String message) {
        super(message);
    }
}
public class RunException {
    public static void main(String[] args) {
        fun(300);

    }
    public static void fun(int age){
        if (age>0 && age < 200){
            System.out.println(age);
        }else {
            System.out.println("输入不合法");
          throw  new AgeAbnormalities("The age you entered is not legal");
        }
    }
}

実行結果は次のとおりです。

 

        3.3 カスタムコンパイルの例外

        まず、例外クラスの継承を定義します。例外、パラメータを使用してオーバーライドされたコンストラクターを渡し、 新しい例外をスローします。 class() を使用して例外オブジェクトを作成し、スローします。

コードは以下のように表示されます:

public class AgeCompilationException extends Exception{
    public AgeCompilationException(String message) {
        super(message);
    }
}
public class CompilationException {
    public static void main(String[] args) throws Exception{
        fun(300);
    }
    public static void fun(int age) throws Exception{
        if (age > 0 && age < 200){
            System.out.println(age);
        }else {
            throw new AgeCompilationException("The age you entered is not legal");
        }
    }
}

カスタム コンパイル例外の場合は、 throw new AgeCompilationException("入力した年齢は合法ではありません");を記述した後に注意してください。 2> このステートメントの後に、throws キーワードを通じて例外を宣言する必要があります。その後、この関数を呼び出すには、例外を宣言するか、コンパイルする例外をキャッチする必要もあります。例外です。対処してください。

実行結果は次のとおりです。

 

        3.4 区别 スロー および スロー 

        throw throws は、Java で例外を処理するために使用されるキーワードです。

        throw キーワードは、例外オブジェクトをスローするために使用されます。通常、特定の条件下で積極的に例外をスローするためにメソッド内で使用されます。 throw キーワードを使用する場合は、例外オブジェクトをパラメータとして指定する必要があります。例外オブジェクトには、Java の組み込み例外クラスまたはカスタム例外を使用できます。 。 親切。

        throws キーワードは、メソッド宣言でスローされる例外のタイプを指定するために使用されます。これは、このメソッドがいくつかの例外をスローする可能性があり、呼び出し元がそれに応じて例外を処理する必要があることを呼び出し元に伝えるために使用されます。 throws キーワードを使用する場合、メソッド宣言の後に例外タイプを続ける必要があります。例外タイプは 1 つ以上の例外タイプであり、複数の例外タイプの間で使用されます。例外タイプ。カンマ区切り。

 

        4.0 例外の魅力をさらに理解するには、例を使用します。

import java.util.Scanner;
public class Text_Exception {
    public static void main(String[] args) {

        while (true) {
            try {
                getMoney();
                break;
            } catch (Exception e) {
                System.out.println("请输入数字!!!");
            }
        }

    }
    public static void getMoney(){
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入价格:");
            double money = scanner.nextDouble();
            if (money > 0){
                System.out.println(money);
                break;
            }else {
                System.out.println("输入不合法,请重新输入!!!");
            }
        }
    }
}

実行結果は次のとおりです。

         具体的な機能は、不正な入力が数値でない場合でも、プログラムはクラッシュせず、再度修復を試みることです。したがって、このプログラムは非常に堅牢です。この状況を解決するために例外を使用できるかどうかを自分で感じてください。

 その他のコンテンツはこちら:小波_-CSDN ブログ



 

おすすめ

転載: blog.csdn.net/Tingfeng__/article/details/133908532