実際には、例外処理は構文を理解するだけでは簡単ではありません。堅牢なコードを書くことは芸術のようなものであり、この記事では Java 例外処理のベスト プラクティスについて説明します。これらの Java のベスト プラクティスは、標準の JDK ライブラリと、エラーと例外を処理するためのいくつかのオープン ソース コードに従っています。また、Java プログラマーが堅牢なコードを作成するための便利なマニュアルでもあります。
Java プログラミングにおける例外処理のベスト プラクティス
ここでは、私が集めた Java プログラミングにおける例外処理の 10 のベスト プラクティスを紹介します。 Java プログラミングにおけるチェック例外には賞賛と批判がありますが、例外の強制処理は言語の機能です。この記事では、チェック例外の使用を最小限に抑え、Java プログラミングにおけるチェック例外と非チェック例外の使用方法を学習します。
1) 回復可能なエラーにはチェック例外を使用し、プログラミング エラーには未チェック エラーを使用します。
Java プログラマーにとって、チェック例外とチェックなし例外の選択は常に混乱します。チェックされた例外により、エラー条件に対する例外処理コードが確実に提供されます。これは、言語が堅牢なコードを作成することを強制する方法ですが、多くの混乱が発生し、読みにくくなります。もちろん、置換および回復戦略がある場合、例外をキャッチしてそれに対して何らかの措置を講じることは合理的だと思われます。 Java プログラミングにおけるチェック例外とランタイム例外のどちらかを選択します。詳細については、「チェック例外と非チェック例外」を参照してください。
2)finally ブロックでリソースを閉じるか解放します
これは Java プログラミングのよく知られたベスト プラクティスであり、ネットワークおよび IO クラスを扱うときの標準に相当します。 finally ブロックでリソースを閉じると、通常および異常な実行条件下で以前の希少なリソースが適切に解放されます。これは、finally ブロックによって保証されます。 Java 7 以降、この言語にはさらに興味深い機能が追加されました。リソース管理の自動化または ARM ブロックでこの機能を実装できます。それにもかかわらず、finally ブロックでリソースを閉じることを忘れないようにする必要があります。これは、ソケットやファイルのプログラミング状況で使用される FileDescriptor などの限られたリソースを解放するために重要です。
3) 例外の原因をスタック トレースに含めます
多くの場合、別の例外によって引き起こされた例外がスローされると、Java ライブラリとオープン ソース コードは 1 つの例外を別の例外にラップします。ルート例外のログ記録と出力が非常に重要になります。 Java 例外クラスは、例外の原因を取得する getCause() メソッドを提供します。これにより、例外の根本レベルの原因に関する詳細情報が得られます。この Java の実践は、デバッグやトラブルシューティングの際に非常に役立ちます。例外を別の例外にラップする場合は、新しい例外を作成するときにソース例外を渡す必要があることに常に注意してください。
4) 例外に関する意味のある完全な情報を常に提供してください
例外情報はプログラマが最初に目にする場所であり、ここで問題の根本原因を見つけることができるため、最も重要な場所です。正確かつ本物の情報が常にここで提供されます。たとえば、IllegalArgumentException 例外の 2 つの例外メッセージを比較してください:
メッセージ 1: "メソッドの引数が正しくありません"
メッセージ 2: "${argument} の値が不正です: ${value}
最初のメッセージは、パラメータが不正または不正ですが、2 番目のメッセージにはパラメータ名と不正な値が含まれています。これは、Java プログラミングで例外処理コードを作成するときに常にこの Java ベスト プラクティスに従ってください。チェック例外の多用
チェック例外には適用において一定の利点がありますが、同時にコードが壊れ、ビジネス ロジックがマスクされるためコードが読みにくくなります。チェックを多用しない限り、これらの例外を最小限に抑えることができます。複数の例外に対する 1 つの catch ブロックや、重複を削除するための自動リソース管理などの新しい Java 7 機能を使用することもできます。これは手法の 1 つです。 Spring などのほとんどのフレームワークでチェック例外の使用を制限するために使用されます。それらのほとんどは 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 キーワードが用意されており、javadoc で @throw を使用して、任意のメソッドによってスローされる可能性のある例外を記録します。 API またはパブリック インターフェイスを作成する場合、これは非常に重要になります。メソッドによってスローされた例外はすべて文書化して、それを使用する人に無意識のうちに警告できるようにする必要があります。これらはすべて、Java プログラミングで例外を処理するときに従う必要があるベスト プラクティスです。 Java プログラミングで例外処理コードを作成する際に従う必要があるプラクティスについて教えてください。
LAMP BrothersオリジナルのPHPビデオチュートリアルCD/「Essential PHP in Detail」を無料でプレゼント 詳細は公式サイトカスタマーサービスまでお問い合わせください: http://www.lampbrother.net
|