実際には、例外処理は構文を理解するだけでは簡単ではありません。堅牢なコードを書くことは芸術のようなものであり、この記事では Java 例外処理のベスト プラクティスについて説明します。これらの Java のベスト プラクティスは、標準の JDK ライブラリと、エラーと例外を処理するためのいくつかのオープン ソース コードに従っています。また、Java プログラマーが堅牢なコードを作成するための便利なマニュアルでもあります。 Java プログラミングにおける例外処理のベスト プラクティス
ここでは、私が集めた Java プログラミングにおける例外処理のベスト プラクティス 10 個を紹介します。 Java プログラミングにおけるチェック例外には賞賛と批判がありますが、例外の強制処理は言語の機能です。この記事では、チェック例外の使用を最小限に抑え、Java プログラミングにおけるチェック例外と非チェック例外の使用方法を学習します。
1) 回復可能なエラーにはチェック例外を使用し、プログラミング エラーには未チェック エラーを使用します。
Java プログラマーにとって、チェック例外とチェックなし例外の選択は常に混乱します。チェックされた例外により、エラー条件に対する例外処理コードが確実に提供されます。これは、言語が堅牢なコードを作成することを強制する方法ですが、多くの混乱が発生し、読みにくくなります。もちろん、置換および回復戦略がある場合、例外をキャッチしてそれに対して何らかの措置を講じることは合理的だと思われます。 Java プログラミングにおけるチェック例外とランタイム例外のどちらかを選択します。詳細については、「チェック例外と非チェック例外」を参照してください。
2)finally ブロックでリソースを閉じるか解放します
これは Java プログラミングのよく知られたベスト プラクティスであり、ネットワークおよび IO クラスを扱うときの標準に相当します。 Final ブロックでリソースを閉じると、通常および異常な実行条件下で以前に利用可能で不足していたリソースが適切に解放され、これは Final ブロックによって保証されます。 Java 7 以降、この言語にはさらに興味深い機能が追加されました。リソース管理の自動化または ARM ブロックでこの機能を実装できます。それにもかかわらず、finally ブロックでリソースを閉じることを忘れないようにする必要があります。これは、ソケットやファイルのプログラミング状況で使用される FileDescriptor などの限られたリソースを解放するために重要です。
3) 例外の原因をスタック トレースに含めます
多くの場合、別の例外によって引き起こされた例外がスローされると、Java ライブラリとオープン ソース コードは 1 つの例外を別の例外にラップします。ルート例外のログ記録と出力が非常に重要になります。 Java 例外クラスは、例外の原因を取得する getCause() メソッドを提供します。これにより、例外の根本レベルの原因に関する詳細情報が得られます。この Java の実践は、デバッグやトラブルシューティングの際に非常に役立ちます。例外を別の例外にラップする場合は、新しい例外を作成するときにソース例外を渡す必要があることに常に注意してください。
4) 例外に関する意味のある完全な情報を常に提供してください
例外情報はプログラマが最初に目にする場所であり、ここで問題の根本原因を見つけることができるため、最も重要な場所です。正確かつ本物の情報が常にここで提供されます。たとえば、IllegalArgumentException 例外の 2 つの例外メッセージを比較してください。
メッセージ 1: 「メソッドの引数が正しくありません」
メッセージ 2: 「${argument} の値が不正です: ${value}」
最初のメッセージは、パラメータが不正または正しくありませんが、2 番目のメッセージにはパラメータ名と不正な値が含まれています。これは、Java プログラミングで例外処理コードを作成する際に常にこの Java ベスト プラクティスに従ってください。5) 過度の使用は避けてください。チェックされた例外の数
チェック例外には実行を強制するという点で一定の利点がありますが、同時にコードを破壊し、ビジネス ロジックをマスクすることでコードが読みにくくなります。チェック例外を過度に使用しない限り、このような状況を最小限に抑えることができ、その結果、よりクリーンなコードが得られます。また、複数の例外に対する 1 つの catch ブロックや、重複を削除するための自動リソース管理などの新しい Java 7 機能を使用することもできます。
6) チェック例外をランタイム例外に変換する
これは、Spring などのほとんどのフレームワークでチェック例外の使用を制限するために使用される手法の 1 つであり、JDBC からのチェック例外のほとんどは DataAccessException にラップされます。(DataAccessException) 例外は次のとおりです。未チェックの例外。これは、Java のベスト プラクティスによってもたらされる利点です。特定の例外は、DAO 層に配置される SQLException などの特定のモジュールに制限され、明確な意味を持つ実行時例外はクライアント層にスローされます。
7) 例外はパフォーマンスにコストがかかることを覚えておいてください
覚えておくべきことの 1 つは、例外はコストが高く、コードの実行が遅くなるということです。 ResultSet から読み取るメソッドがある場合、次の要素に移動せずに SQLException をスローすることが多く、例外をスローしない通常のコードよりも実行が大幅に遅くなります。したがって、明確な理由がない場合、不必要な例外のキャッチと移動が最小限に抑えられます。ブール変数を使用して実行結果を表すことができれば、単に例外をスローしてキャッチするのではなく、より適切でパフォーマンスの高いソリューションが得られる可能性があります。エラーの根本原因を修正し、不要な例外のキャッチを回避します。
8) 空の catch ブロックを避ける
空の catch ブロックほど最悪なものはありません。空の catch ブロックは、エラーや例外を隠すだけでなく、オブジェクトを使用不能または汚い状態にする可能性があるからです。空の catch ブロックが無意味になるのは、例外がオブジェクトの状態にいかなる影響も与え続けないことが絶対的に確実な場合に限られますが、それでもプログラムの実行中にエラーをログに記録することが最善の方法です。これは単なる Java のベスト プラクティスではなく、Java プログラミングで例外処理コードを記述するための最も一般的なプラクティスです。
9) 標準例外を使用する
9 番目のベスト プラクティスでは、標準例外と組み込み Java 例外を使用することをお勧めします。毎回独自の例外を作成するのではなく、標準の例外を使用することが、現在および将来の保守性と一貫性の点で最良の選択です。標準例外を再利用すると、コードが読みやすくなります。ほとんどの Java 開発者は、JDK から発生する RuntimeException、IllegalStateException、IllegalArgumentException、または NullPointerException などの標準例外に精通しており、各例外を一目で知ることができるためです。その目的は、ユーザーを検索することではありません。コードまたはドキュメントで定義された例外。
10) 任意のメソッドによってスローされた例外を記録します
Java には、例外をスローするための throw および throws キーワードが用意されています。[email protected]��これは、API またはパブリック インターフェイスを作成する場合に非常に重要になります。メソッドによってスローされた例外はすべて文書化して、それを使用する人に無意識のうちに警告できるようにする必要があります。 これらはすべて、Java プログラミングで例外を処理するときに従う必要があるベスト プラクティスです。 Java プログラミングで例外処理コードを作成する際に従う必要があるプラクティスについて教えてください。