21

重複の可能性:
Java では、いつチェック済み例外を作成し、いつ実行時例外にする必要がありますか?

RuntimeExceptionの代わりにいつから例外を派生させる必要がありExceptionますか?

RuntimeExceptionメソッドのthrows句でAを宣言する必要はありません。これは、明示的にリストする必要がないため良い場合もあれば、メソッドの例外を明示的に宣言することをお勧めするため悪い場合もあります。

考え?

4

2 に答える 2

62

未チェックの例外から-論争:

クライアントが例外からの回復を合理的に期待できる場合は、それをチェック済みの例外にします。クライアントが例外から回復するために何もできない場合は、チェックされていない例外にします。

RuntimeExceptionチェックされていない例外はから派生したものであり、チェックされた例外はから派生したものであることに注意してくださいException

RuntimeExceptionクライアントが例外から回復するために何もできない場合、なぜをスローするのですか?記事の説明:

ランタイム例外は、プログラミングの問題の結果である問題を表します。そのため、APIクライアントコードは、それらから回復したり、何らかの方法でそれらを処理したりすることを合理的に期待することはできません。このような問題には、ゼロ除算などの算術例外が含まれます。null参照を介してオブジェクトにアクセスしようとするなどのポインタ例外。インデックスの例外(大きすぎるまたは小さすぎるインデックスを介して配列要素にアクセスしようとするなど)。

于 2010-11-20T16:52:56.760 に答える
16

エンタープライズ アプリケーションの開発では、Exception の代わりに RuntimeException を使用するシナリオが数多くあります。以下は、非常に一般的な 2 つのシナリオです。

  • 例外処理を側面として実装する (懸念事項の設計原則を分離する) 場合、最近のほとんどのフレームワークでは、例外をハードコーディングするのではなく、宣言的に例外を処理し、特定の例外処理ブロックを関連付けます。この良い例の 1 つは、すべての SQL 例外を RuntimeException に変換する Spring の JDBC テンプレートです。これにより、開発者は、データ アクセス ロジックを記述するときに try catch ブロックを記述しません。開発環境で異なる動作を提供できる例外ハンドラーを宣言的に定義できます。および本番環境での異なる動作。Struts 1.x Action クラスにも同様の実装があり、execute メソッドが例外をスローするように宣言されており、特定の例外を処理するために struts-config にマップされた別の ExceptionHandler があります。
  • RuntimeException のもう 1 つの使用法は、EJB およびその他のトランザクション マネージャーで、トランザクションがコンテナーごとにコントローラーである場合です。このようなコンテナーでは、慣例により、コード内から RuntimeException をスローすると、トランザクションがロールバックされます。例外をスローしても、同じことは起こりません。

これらはすぐに頭に浮かぶ 2 つの重要なシナリオですが、もちろん他のシナリオもあります。

于 2010-11-20T16:51:20.180 に答える