2010-11-20 13 views
12

可能性の重複:
In Java, when should I create a checked exception, and when should it be a runtime exception?RuntimeExceptionを適切に使用していますか?

私はRuntimeException代わりのExceptionから例外を導き出す必要がありますか?

、明示的に宣言することをお勧めしますので、特に記載されているか悪いする必要はありませんので、RuntimeException良いかもしれ法のthrows句で宣言する必要はありません。メソッドの例外。

思考?あなたがのRuntimeExceptionの代わりに、例外を使用するエンタープライズアプリケーション開発における多くのシナリオがありますが、次はかなり共通している二つのそのようなシナリオです

+2

重複http://stackoverflow.com/questions/499437/in-java-when-should-i-create-a-checked-exception-and-when-should-it-be-a-runtim –

答えて

43

クライアントが合理 は、それがチェック例外を 行い、例外からの回復が期待できる場合。クライアント が 例外から回復することができない場合は、チェックされていない 例外にしてください。チェックされない例外は、RuntimeExceptionに由来するものであると確認され、例外がExceptionに由来するものであること

注意。

クライアントが例外から回復するために何もできない場合は、なぜRuntimeExceptionを投げるのですか?記事では説明しています

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

8

:側面として例外処理を実装しながら

  • (懸念の設計原理を分離)、現代のほとんどのフレームワークでは、宣言的に例外を処理し、それをハードコーディングするのではなく特定の例外処理ブロックを関連付けます。これの良い例の1つは、SpringのJDBCテンプレートで、すべてのSQL例外をRuntimeExceptionに変換するため、開発者はデータアクセスロジックの書き込み中にtry catchブロックを書きません。 dev envで異なる動作を提供できる例外ハンドラを宣言的に定義することができます。生産における異なる行動Struts 1.x Actionクラスにも同様の実装があります。executeメソッドがExceptionをスローするように宣言され、特定の例外を処理するためにstruts-configにマップされた別々のExceptionHandlerがあります。これはRuntimeExceptionの例ではありませんが、通常の実行と例外処理の問題を区別する設計原理は同じです。
  • RuntimeExceptionのもう1つの使用方法は、トランザクションがコンテナ別のコントローラであるEJBおよび他のトランザクションマネージャです。あなたがのRuntimeExceptionをスローする場合は慣例によりこのような容器では、あなたのコード内からのトランザクションはロールバックう - 同じことは、あなたが

例外をスローする場合、これらはすぐに他のシナリオが存在することになる私の心に来て2つのシナリオです起こらないだろうオブコース。 Unchecked Exceptions -- The Controversyから

関連する問題