2016-09-26 4 views
0

私は定義している(つまりネットワークエラー、検証エラーなど)いくつかの例外タイプを持っています - 今は基本的に "予想しなかった他の例外をすべてキャッチしたい"これを行う最善の方法は何ですか?Java - 他のすべての予期しない例外をキャッチ

generic Excepion eを使用していますか?

おかげ

+0

はい。または、Throwableをキャッチすることはできますが、それはお勧めできません。 – Kon

答えて

7

すべての予期された例外を書き留めてから、Exceptionをフォローすることをお勧めします。

try 
{ 
} 
catch (expectedException1 e) 
{ 
} 
. 
. 
. 
catch (Exception e) 
{ 
} 

これは、期待している個々の例外を処理するのに役立ちます。最後に、例外が発生したときには、それを一般的に処理できます。 Exceptionクラスはすべての例外の先頭に位置するので、最後の例外クラスにする必要があります。一般的なルールは、リストを下に行くと、階層が上位に向かいます。

0

例外は1つが合理的にキャッチする必要があることを例外の「最大」タイプです。それ以外のものをカバーするので、Error

警告:あなたの具体的な状況によっては、をキャッチする例外はまだ悪い習慣である可能性があります。

  1. あなたはあなたのコードは
  2. あなたのコードをやっていることは、あなたが本当にそれ
  3. から出てくる可能性があるかを知ることができないほど複雑であるか見当がつかない:それを行うことは一般的に2つのいずれかの指標であります

両方のオプションについては、それは避けるべきことです!

言い換えれば:キャッチ例外は、あなたが通常非常に高いレベルで行うことです - アプリケーションの低レベルは、どのレベルの例外が正確に下位レベルから出てくるかを正確に知る必要があります。それらを捕まえるだけです。まったくの場合、実際には例外の1つのキャッチ(遠い外側)を望むだけです。なぜなら、キャッチブロック内で唯一行うことができるのは、いくつかのロギングと、ユーザーへのエラーメッセージです。

+0

3つ目のオプションがあります。ほとんどの場合正当なケースです。プラグイン可能な機能があります。 – biziclop

-1

ベストプラクティスのために、RuntimeExceptionを拡張しない例外はキャッチして処理するかスローする必要があります。 setUncaughtExceptionHandlerもあります。これはjava.lang.Threadに設定できます。これは 'キャッチオール'として使用できます

+0

setUncaughtExceptionHandlerは、コード内の他の可能性のある例外ハンドラに割り込むことができます。彼らはクラッシュ報告システムによって理想的に使用されます。一般的には、例外をすべて捕まえるのにこれを使うべきではありません!また、使用されている場合は、元の例外ハンドラに渡すために適切な注意を払わなければなりません。 – prabodhprakash

関連する問題