著者のホームページ:デザイナー Xiao Zheng
著者の簡単な紹介: JAVA テクノロジ、システム カスタマイズ、リモート ガイダンスに重点を置いた 3 年間の JAVA フルスタック開発経験、エンタープライズ デジタル トランスフォーメーションに専念、CSDN カレッジおよび Blue Bridge クラウド コースの認定講師。
主な方向性: Vue、SpringBoot、WeChat アプレット
この記事では、Java での例外キャプチャと例外処理の概念と構文を説明し、サンプル コードを示します。例外をキャッチすると、動作中に発生する可能性のあるエラー状態を処理し、例外によってプログラムが実行を終了するのを防ぐことができます。例外をキャッチし、適切な措置を講じることにより、プログラムをより堅牢かつ安定させることができます。
目次
1. なぜ例外をキャッチする必要があるのか
Java では、例外をキャッチすることは優れたプログラミング手法であり、次のとおりです。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
実行して例外を処理します。ブロックは例外タイプをパラメータとして受け取り、特定のタイプの例外をキャッチするために使用されます。複数のブロックを使用して、特定の処理のためにさまざまなタイプの例外をキャッチできます。catch
catch
catch
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、しっかり勉強してください。
- 例外が発生する: プログラムの実行中に例外が発生すると、JVM は例外オブジェクトをスローします。
- 例外キャプチャ: try-catch ステートメント ブロックを使用して例外をキャプチャし、処理します。try ブロックで例外をスローする可能性のあるコードを作成します。
- 例外のマッチング: 例外が発生すると、JVM は catch ブロック内の例外タイプを上から下に順番にマッチングします。対応する例外タイプが一致する場合、プログラムは一致する catch ブロックにジャンプして、対応するコードを実行します。
- 例外処理: catch ブロックでは、例外を処理するロジックを作成できます。これには、エラー メッセージの出力、ログ記録、トランザクションのロールバックなどが含まれます。例外タイプに一致する catch ブロックがない場合、例外は呼び出しスタックに渡されます。
- Finally ブロックの実行: 例外が発生したかどうかに関係なく、Finally ブロック内のコードが実行されます。通常、finally ブロックは、リソースを解放したり、クリーンアップ操作を実行したりするために使用されます。
- 例外の伝播: 例外が catch ブロックで処理される場合、プログラムは catch ブロックの後にコードを実行し続けます。例外が処理されない場合、または処理後に新しい例外がスローされた場合、例外はキャッチされるかプログラムの実行を終了させるまで、上位の呼び出しスタックに渡されます。
- 例外チェーン: catch ブロックでは、新しい例外を throw キーワードを通じてスローし、元の例外を新しい例外の原因として渡すことができます。これにより例外チェーンが形成され、例外が発生したプロセスがより適切に説明されます。
例外処理の目的は、プログラムの堅牢性とフォールト トレランスを向上させ、例外によるプログラムのクラッシュを防ぐことです。例外処理を合理的に使用すると、エラー状態の管理と処理が改善され、プログラムの信頼性が高まります
。
6. 例外処理に関する面接の質問
- Java の例外とは何ですか? 一般的な例外タイプの例を示します。
- try-catch-finally ステートメントは何をするのでしょうか? 実行される順序を説明してください。
- throw と throw はどう違いますか?
- RuntimeException と Checked Exception の違いは何ですか? いつ使用する必要がありますか?
- 例外処理チェーンとは何ですか? それは何をするためのものか?
- Java では、catch ブロック内に複数の catch ステートメントを含めることはできますか? もしそうなら、彼らの命令は何ですか?
- try-with-resources ステートメント ブロックとは何ですか? 従来の try-finally ブロックとどう違うのでしょうか?
- Javaでカスタム例外クラスを定義するにはどうすればよいですか? なぜカスタム例外クラスなのか?
- finally ブロック内で return ステートメントを使用するとどうなりますか?
- 例外処理のベスト プラクティスは何ですか? どのような提案がありますか?
7. まとめ
この記事では、Java における例外キャプチャと例外処理の概念と構文、およびサンプル コードを説明し、次回のブログでは Java における throw および throws キーワードの使用法について説明します。