[JavaSE コラム 68] 例外のキャプチャと処理、try-catch-finally による例外処理の問題の効率的な解決

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

この記事では、Java での例外キャプチャと例外処理の概念と構文を説明し、サンプル コードを示します。例外をキャッチすると、動作中に発生する可能性のあるエラー状態を処理し、例外によってプログラムが実行を終了するのを防ぐことができます。例外をキャッチし、適切な措置を講じることにより、プログラムをより堅牢かつ安定させることができます。

ここに画像の説明を挿入


1. なぜ例外をキャッチする必要があるのか

Java では、例外をキャッチすることは優れたプログラミング手法であり、次のとおりです。4つの理由、頑張って勉強してください。

  1. エラー処理: 例外をキャッチすると、動作中に発生する可能性のあるエラー状態を処理し、例外によってプログラムが実行を終了するのを防ぐことができます。例外をキャッチし、適切な措置を講じることにより、プログラムをより堅牢かつ安定させることができます。
  2. 例外情報: 例外をキャッチすると、例外の種類、スタック トレースなど、例外の発生に関する詳細情報が提供され、プログラムの問題のデバッグやトラブルシューティングに役立ちます。異常情報を記録し、その後の分析や問題の修復に役立てることができます。
  3. フォールトトレランス: 例外をキャッチすることで、例外発生時に対応する処理を実行し、プログラムの終了や予期せぬ結果を回避します。合理的な例外処理により、プログラムの耐障害性が高まり、異常な状況が適切に処理され、システムの信頼性と安定性が向上します。
  4. ユーザーの使いやすさ: 例外をキャッチすることで、より使いやすいユーザー インターフェイスとエラー プロンプトを提供できます。例外をキャッチし、ユーザーにわかりやすい方法でエラー メッセージを表示することにより、ユーザー エクスペリエンスを向上させ、ユーザーが問題をよりよく理解して解決できるようにすることができます。

全体として、例外をキャッチすることは、プログラムの堅牢性、信頼性、使いやすさを向上させる優れたプログラミング手法であり、これにより、プログラムは動作中に発生する可能性のある異常な状態に対処し、例外を処理するための適切な措置を講じることができます。プログラムの通常の実行。

ここに画像の説明を挿入


2、try-catch ステートメント

Javaでは例外をキャッチして処理するために「try-catch」文を使用しますが、その基本的な構文は次のとおりですので、ローカルにコピーして実行してみてください。

try {
    
    
    // 可能会引发异常的代码
} catch (ExceptionType1 e1) {
    
    
    // 处理 ExceptionType1 类型的异常
} catch (ExceptionType2 e2) {
    
    
    // 处理 ExceptionType2 类型的异常
} finally {
    
    
    // 可选部分,无论是否发生异常都会执行的代码
}

ブロック内にはtry例外をスローする可能性のあるコードを記述することができ、tryブロック内で例外が発生した場合、プログラムは対応するcatchブロックにジャンプし、catchブロック内のコードを実行して例外を処理します。

catchブロックは例外タイプをパラメータとして受け取り、特定のタイプの例外をキャッチするために使用されます。学生は複数のcatchブロックを使用して、特定の処理のさまざまなタイプの例外をキャッチできます。catchブロック内のコードは、例外の種類に基づいて適切なロジックを実行します。

finallyブロックはオプションであり、例外が発生するかどうかに関係なく実行されるコードを記述するために使用されます。finallyブロック内のコードは通常、リソースを解放したり、クリーンアップ操作を実行したりするために使用されます。

try-catchステートメント ブロックは順番に書き込む必要があります。つまり、最初にブロックtry、次にcatchブロック、最後にfinallyブロックの順に書きます。同時に、catchブロックとブロックfinallyの一部を省略することもできますが、tryブロックは必須です。

以下はtry-catchステートメントの使用法を示すサンプル コードです。ローカルにコピーして実行してみてください。

try {
    
    
    int result = divide(10, 0);
    System.out.println("Result: " + result);
} catch (ArithmeticException e) {
    
    
    System.out.println("An arithmetic exception has occurred: " + e.getMessage());
} finally {
    
    
    System.out.println("Finally block is executed");
}

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

上記のコードでは、divide(10, 0)除算演算を行うメソッドを呼び出しました。約数は0 0なので0 の場合ArithmeticException例外がスローされます。

次に、例外は catch ブロックによってキャッチされて処理され、例外情報が出力されますAn arithmetic exception has occurred: / by zero

例外が発生するかどうかに関係なく、finallyブロック内のコードが実行され、次の出力が行われますFinally block is executed

ステートメント ブロックを使用してtry-catch例外をキャッチして処理し、プログラムの終了を回避し、プログラムの堅牢性とフォールト トレランスを向上させます。

ここに画像の説明を挿入


3、try-final ステートメント

Java では、try-finally例外が発生したかどうかに関係なく、特定のコードが確実に実行されるようにするためにステートメントが使用されますが、その基本的な構文は次のとおりですので、よく読んでください。

try {
    
    
    // 可能会引发异常的代码
} finally {
    
    
    // 无论是否发生异常都会执行的代码
}

このブロックでは try、学生は例外をスローする可能性のあるコードを書くことができます。

プログラムは、finally例外が発生したかどうかに関係なく、ブロック内のコードを実行します。finallyブロックは、プログラムの終了時に必要な操作を確実に完了できるように、リソースの解放、接続のクローズ、またはクリーンアップ操作の実行によく使用されます。

tryブロック内で例外が発生した場合、プログラムはブロック (存在する場合)finallyを実行する前にそのブロックにジャンプします。catch

catchブロックは例外を処理し、プログラムの実行はfinallyブロック内のコードから続行されます。

ブロックの実行が完了するとfinally、プログラムは例外処理に続いてコードの実行を続けます。

try-finallyこのステートメントの使用法を示すサンプル コードを次に示します。

public class Example {
    
    
    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());
        } finally {
    
    
            System.out.println("Finally block is executed");
        }
    }
    
    public static int divide(int num1, int num2) {
    
    
        try {
    
    
            return num1 / num2;
        } finally {
    
    
            System.out.println("Finally block inside divide() method is executed");
        }
    }
}

上記のコードでは、divide(10, 0)除算演算を行うメソッドを呼び出しました。約数は0 0なので0 の場合ArithmeticException例外がスローされます。次に、例外がcatchブロックによってキャッチされて処理され、例外メッセージが出力されますAn arithmetic exception has occurred: / by zero

例外が発生するかどうかに関係なく、finallyブロック内のコードが実行され、次の出力が行われますFinally block is executed

同時に、divide()メソッド内では、例外が発生したかどうかに関係なく、finallyブロック内のコードも実行され、以下が出力されますFinally block inside divide() method is executed

ステートメント ブロックを使用するとtry-finally、例外が発生したかどうかに関係なく、どのような場合でもコードの特定の部分が確実に実行されます。これは、リソースをクリーンアップしたり、必要な操作を実行したりする場合に非常に役立ちます。

ここに画像の説明を挿入


4、try-catch-finally ステートメント

Java では、try-catch-finallyステートメントは例外をキャッチして処理すると同時に、例外が発生したかどうかに関係なく特定のコードが確実に実行されるようにするために使用されます。その基本的な構文は次のとおりです。

try {
    
    
    // 可能会引发异常的代码
} catch (ExceptionType1 e1) {
    
    
    // 处理ExceptionType1类型的异常
} catch (ExceptionType2 e2) {
    
    
    // 处理ExceptionType2类型的异常
} finally {
    
    
    // 无论是否发生异常都会执行的代码
}

ブロックではtry、例外をスローする可能性のあるコードを記述することができます。ブロック内で例外が発生した場合try、プログラムは対応するブロックにジャンプし、ブロック内のコードをcatch実行して例外を処理します。ブロックは例外タイプをパラメータとして受け取り、特定のタイプの例外をキャッチするために使用されます。複数のブロックを使用して、特定の処理のためにさまざまなタイプの例外をキャッチできます。catchcatchcatch

catchブロック内のコードは、例外の種類に基づいて適切なロジックを実行します。catch異なるタイプの例外を各ブロックで処理でき、 catch複数の例外タイプを 1 つのブロックで処理できますcatch (ExceptionType1 | ExceptionType2 e)

finallyブロックはオプションであり、例外が発生するかどうかに関係なく実行されるコードを記述するために使用されます。finallyブロック内のコードは通常、リソースを解放したり、クリーンアップ操作を実行したりするために使用されます。

ステートメント ブロックは順番に書き込む必要があることに注意してくださいtry-catch-finally。つまり、try最初にブロック、次にcatchブロック、最後にfinallyブロックを書きます。同時に、catchブロックとブロックfinallyの一部を省略することもできますが、tryブロックは必須です。

以下はtry-catch-finallyステートメントの使用法を示すサンプル コードです。よく読んでください。

try {
    
    
    int result = divide(10, 0);
    System.out.println("Result: " + result);
} catch (ArithmeticException e) {
    
    
    System.out.println("An arithmetic exception has occurred: " + e.getMessage());
} finally {
    
    
    System.out.println("Finally block is executed");
}

public static int divide(int num1, int num2) {
    
    
    try {
    
    
        return num1 / num2;
    } finally {
    
    
        System.out.println("Finally block inside divide() method is executed");
    }
}

上記のコードでは、divide(10, 0)除算演算を行うメソッドを呼び出しました。約数は0 0なので0 の場合ArithmeticException例外がスローされます。

次に、例外がcatchブロックによってキャッチされて処理され、例外メッセージが出力されますAn arithmetic exception has occurred: / by zero

例外が発生するかどうかに関係なく、finallyブロック内のコードが実行され、次の出力が行われますFinally block is executed

同時に、divide()メソッド内では、例外が発生したかどうかに関係なく、finallyブロック内のコードも実行され、以下が出力されますFinally block inside divide() method is executed

ステートメント ブロックを使用してtry-catch-finally例外をキャッチして処理し、例外が発生したかどうかに関係なく、すべての状況下で特定のコードが確実に実行されるようにします。これは、リソースをクリーンアップしたり、必要な操作を実行したりする場合に役立ちます。

ここに画像の説明を挿入


5. 例外処理処理

Java では、例外処理のプロセスは次のようになります。7 7ステップ7、しっかり勉強してください。

  1. 例外が発生する: プログラムの実行中に例外が発生すると、JVM は例外オブジェクトをスローします。
  2. 例外キャプチャ: try-catch ステートメント ブロックを使用して例外をキャプチャし、処理します。try ブロックで例外をスローする可能性のあるコードを作成します。
  3. 例外のマッチング: 例外が発生すると、JVM は catch ブロック内の例外タイプを上から下に順番にマッチングします。対応する例外タイプが一致する場合、プログラムは一致する catch ブロックにジャンプして、対応するコードを実行します。
  4. 例外処理: catch ブロックでは、例外を処理するロジックを作成できます。これには、エラー メッセージの出力、ログ記録、トランザクションのロールバックなどが含まれます。例外タイプに一致する catch ブロックがない場合、例外は呼び出しスタックに渡されます。
  5. Finally ブロックの実行: 例外が発生したかどうかに関係なく、Finally ブロック内のコードが実行されます。通常、finally ブロックは、リソースを解放したり、クリーンアップ操作を実行したりするために使用されます。
  6. 例外の伝播: 例外が catch ブロックで処理される場合、プログラムは catch ブロックの後にコードを実行し続けます。例外が処理されない場合、または処理後に新しい例外がスローされた場合、例外はキャッチされるかプログラムの実行を終了させるまで、上位の呼び出しスタックに渡されます。
  7. 例外チェーン: catch ブロックでは、新しい例外を throw キーワードを通じてスローし、元の例外を新しい例外の原因として渡すことができます。これにより例外チェーンが形成され、例外が発生したプロセスがより適切に説明されます。

例外処理の目的は、プログラムの堅牢性とフォールト トレランスを向上させ、例外によるプログラムのクラッシュを防ぐことです。例外処理を合理的に使用すると、エラー状態の管理と処理が改善され、プログラムの信頼性が高まります


6. 例外処理に関する面接の質問

  1. Java の例外とは何ですか? 一般的な例外タイプの例を示します。
  2. try-catch-finally ステートメントは何をするのでしょうか? 実行される順序を説明してください。
  3. throw と throw はどう違いますか?
  4. RuntimeException と Checked Exception の違いは何ですか? いつ使用する必要がありますか?
  5. 例外処理チェーンとは何ですか? それは何をするためのものか?
  6. Java では、catch ブロック内に複数の catch ステートメントを含めることはできますか? もしそうなら、彼らの命令は何ですか?
  7. try-with-resources ステートメント ブロックとは何ですか? 従来の try-finally ブロックとどう違うのでしょうか?
  8. Javaでカスタム例外クラスを定義するにはどうすればよいですか? なぜカスタム例外クラスなのか?
  9. finally ブロック内で return ステートメントを使用するとどうなりますか?
  10. 例外処理のベスト プラクティスは何ですか? どのような提案がありますか?

ここに画像の説明を挿入


7. まとめ

この記事では、Java における例外キャプチャと例外処理の概念と構文、およびサンプル コードを説明し、次回のブログでは Java における throw および throws キーワードの使用法について説明します。

ここに画像の説明を挿入

おすすめ

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