[JavaSE コラム 67] 例外について話し、例外を予測し、例外をキャッチし、例外を転送する方法を学びます。

著者のホームページ:デザイナー Xiao Zheng
著者の簡単な紹介: JAVA テクノロジ、システム カスタマイズ、リモート ガイダンスに重点を置いた 3 年間の JAVA フルスタック開発経験、エンタープライズ デジタル トランスフォーメーションに専念、CSDN カレッジおよび Blue Bridge クラウド コースの認定講師。
主な方向性: Vue、SpringBoot、WeChat アプレット

この記事では、Java の例外の基本概念と構文を説明し、サンプル コードを示します。例外とは、プログラムの実行中に発生するエラーまたは異常な状況を指します。プログラム内で例外が発生すると、例外オブジェクトがスローされ、通常のプログラムの実行フローが中断され、制御が例外処理メカニズムに移ります。

ここに画像の説明を挿入


1. 例外とは何ですか

Java では、例外とは、プログラムの実行中に発生するエラーまたは異常な状態を指します

プログラム内で例外が発生すると、例外オブジェクトがスローされ、プログラム実行の通常のフローが中断され、制御が例外処理メカニズムに移されます。

例外は、チェック例外非チェック例外の 2 種類に分類できます

  1. チェック例外: チェック例外は、コンパイラがプログラムに明示的に処理するか、スローを宣言することを要求する例外を指します。これらの例外は通常、プログラム内で予期されるエラーや異常な状態を表しており、プログラマがコード内で処理する必要があります。たとえば、IOException(I/O 例外) やSQLException(データベース例外) などです。
  2. 未チェック例外: 未チェック例外は、コンパイラがプログラムで明示的に処理したりスローを宣言したりする必要のない例外です。これらの例外は通常、プログラム内の論理エラーまたは実行時エラーによって発生します。これらはコンパイル中には検出できませんが、プログラムの実行中にスローされます。たとえば、NullPointerException(Null ポインター例外)、ArrayIndexOutOfBoundsException(配列インデックス範囲外例外)、またはArithmeticException(算術例外) などです。

例外を処理する方法は、try-catchステートメント ブロックを使用して例外をキャッチして処理することです。ブロック内で例外をスローする可能性のあるコードを作成し、ブロックtry内で例外を処理しcatch、エラー メッセージの出力や他の操作の実行などの適切なアクションを実行します。

さらに、throwsキーワードを使用してメソッドがスローする可能性のある例外を宣言することもできます。これにより、メソッドを呼び出すコードは例外を処理するか、スローの宣言を続行する必要があります。

例外処理メカニズムの目的は、プログラムの堅牢性と耐障害性を高めて、プログラムが例外を適切に処理し、プログラムの正常な動作を保証できるようにすることです。

ここに画像の説明を挿入


2. 例外が発生する仕組み

Java では、プログラムの実行中にエラーや異常な状況が発生した場合に例外が発生します次のとおりです。よくある4 つの異常事態について、よく調べてください。

  1. 実行時エラー: これらのエラーは、プログラムの論理エラーまたは実行時エラーが原因です。たとえば、NULL ポインタ参照、範囲外の配列インデックス、算術例外などです。
  2. メソッドを呼び出すと例外がスローされる: メソッドを呼び出すときに、メソッドが例外をスローできると宣言し、メソッド内で例外が発生した場合、例外がスローされます。たとえば、ファイルの読み取りまたは書き込み時に発生する可能性のある例外ですIOException
  3. 明示的に例外をスローする: キーワードを使用して、コード内でthrow明示的に例外をスローできます。これは通常、プログラム内でエラーまたは異常な状態が検出されたときに人為的にスローされる例外です。たとえば、カスタム例外クラスや特定の例外オブジェクトをスローします。
  4. JVM によってスローされる例外: Java 仮想マシンによって自動的にスローされる例外があり、これらの例外は通常、重大なエラーまたはシステム レベルの例外を示します。たとえば、OutOfMemoryErrorメモリ不足を示す、StackOverflowErrorスタック オーバーフローを示すなどです。

いずれの場合も、プログラム内で例外が発生すると、例外オブジェクトが作成され、プログラムの通常の実行フローが中断されます。例外オブジェクトがスローされ、コール スタックで例外を処理できるコード ブロックが検索されます。

  • 適切な例外ハンドラー (catch ブロック) が見つかった場合、例外はキャッチされ、ハンドラー内でそれに応じて処理されます。

  • 適切な例外ハンドラーが見つからない場合、例外を処理できる場所が見つかるかプログラムが終了するまで、例外は上位の呼び出しスタックに渡されます。

例外を適切に処理することにより、プログラムの堅牢性と耐障害性が向上し、プログラムの安定性と信頼性が保証されます。

ここに画像の説明を挿入


3. 例外の種類

Java では、例外はチェック可能な例外(実行時例外エラー)の 3 つのカテゴリに分類できます。よく調べてください。

  1. チェック可能な例外: これらの例外はコンパイル時にチェックアウトされ、コンパイラはそれらの例外を強制的に処理するか、スローするように宣言します。これらは通常、プログラム内の予期されるエラーや異常な状態を表しており、プログラマがコード内で処理する必要があります。一般的なチェック例外にはIOException、、、SQLExceptionなどClassNotFoundExceptionがあります。
  2. 実行時例外: これらの例外は、プログラムの実行中に発生するエラーまたは異常な状態を表し、チェックされていない例外です。これらは通常、コンパイル中に検出できないプログラム ロジック エラーまたはランタイム エラーによって発生します。コンパイラは処理を強制したり、スローを宣言したりしません。一般的な実行時例外にはNullPointerException、、、ArrayIndexOutOfBoundsExceptionなどがありますArithmeticException
  3. エラー: エラーは、重大な問題またはシステム レベルの例外を示します。通常、Java 仮想マシンによって自動的にスローされます。通常、エラーはプログラムによって処理または回復できません。一般的なエラーには、 などがありOutOfMemoryErrorますStackOverflowError

チェック可能な例外と実行時例外を処理するには、try-catchステートメント ブロックを使用して例外をキャッチして処理するか、throwsキーワードを使用してメソッド宣言で例外をスローできます。エラーの場合、通常、それらを効果的に処理することは不可能です。最も一般的な方法は、プログラムは終了します。

コードを記述するときは、実際の状況に応じて例外を処理する方法を決定する必要があります。

チェック可能な例外の場合は、エラー情報の提供、操作の再試行、操作のロールバックなど、特定のビジネス ニーズに応じて適切な処理を実行する必要があります。

実行時例外の場合、通常はコード内の論理エラーによって発生しますが、これらの例外はできる限り回避し、適切な境界チェックと例外処理を実行する必要があります。

プログラムで回復できないエラーについては、プログラムの設計段階でエラーを回避するか、エラー発生時に対応するシステムレベルの処理を実行する必要があります。

ここに画像の説明を挿入


4. 例外をキャッチする方法

Java では、try-catchステートメント ブロックを使用して例外をキャッチできます。try例外をスローする可能性のあるコードをブロック内に記述し、catchキャッチされた例外を処理するために使用されます。以下はサンプルコードですので、よく読んでください。

public class ExceptionHandlingExample {
    
    
    public static void main(String[] args) {
    
    
        try {
    
    
            int result = divide(10, 0);
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
    
    
            System.out.println("An arithmetic exception has occurred: " + e.getMessage());
        }
    }

    public static int divide(int num1, int num2) {
    
    
        return num1 / num2;
    }
}

上記のコードでは、divide()除算演算のメソッドを定義しました。

main()このメソッドでは、 を呼び出します。これは、 をdivide(10, 0)スローする可能性のあるArithmeticException操作です。

この例外をキャッチするには、操作をtryブロックに入れてcatchブロック内で処理します。

プログラムが に達するとdivide(10, 0)、除数が 0 であるため例外がスローされますArithmeticException

次に、例外がcatchブロックによってキャッチされ、対応する処理ロジックが実行されます。つまり、例外情報が出力されますAn arithmetic exception has occurred: / by zero

ステートメント ブロックを通じてtry-catch、スローされる可能性のある例外をキャプチャして処理し、プログラム例外によるプログラムのクラッシュを回避し、プログラムの堅牢性とフォールト トレランスを向上させることができます。実際の開発では、状況に応じてさまざまな種類の例外をキャッチし、それに応じた処理を実行します。

ここに画像の説明を挿入


5. 異常な面接の質問

1. Java の例外にはどのような種類がありますか?

  • チェックされた例外
  • 実行時例外
  • 間違い

2. 例外をキャッチして処理するにはどうすればよいですか?

  • try-catch ブロックを使用して例外をキャッチし、catch ブロックで例外を処理します。
  • 複数の catch ブロックを使用して、さまざまな種類の例外をキャッチできます。
  • Finally ブロックを使用すると、例外が発生するかどうかに関係なく実行する必要があるコードを実行できます。

3. try-catch-finally ステートメント ブロック間の実行順序は何ですか?

  • try ブロック内のコードが最初に実行されます。
  • try ブロックで例外が発生した場合は、対応する catch ブロックにジャンプして処理します。
  • try ブロックで例外が発生しない場合、catch ブロックはスキップされます。
  • finally ブロック内のコードは、例外が発生するかどうかに関係なく実行されます。

4. throws キーワードと throw キーワードの違いは何ですか?

  • throws キーワードは、メソッドが一部の例外をスローする可能性があり、メソッドを呼び出すコードが例外を処理する責任があることを示すためにメソッド宣言で使用されます。
  • throw キーワードは、プログラム内で例外を明示的にスローするために使用されます。これにより、カスタム例外または既存の例外タイプをスローできます。

5. RuntimeException と CheckedException の違いは何ですか?

  • RuntimeExceptionこれは実行時例外であり、メソッド内でスローするように明示的に宣言する必要はなく、キャッチする必要もありません。
  • CheckedExceptionこれはチェック可能な例外であり、メソッド内でスローまたはキャッチするように宣言する必要があります。

6. カスタム例外はどのような場合に使用する必要がありますか?

  • 既存の Java 事前定義例外では特定のエラーまたは異常な状況を説明するのに十分ではない場合、カスタム例外を使用して特定のエラーまたは異常な状況を表すことができます。

6. まとめ

この記事では、Java の例外の基本的な概念と構文、サンプル コードを説明し、次回のブログでは Java 例外のキャプチャと処理について説明します。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_41464123/article/details/132111370