2012-02-13 5 views
1

異なった例外を別々に扱う明白なケースのほかに、例外を別々に扱うことにはどんな利点がありますか?私はいつも、私は唯一の例外処理プロセスを持っているときだけで、一般的なExceptionをキャッチする傾向がある異なる例外を別々に取得する利点はありますか?

try { 
    doSomethingThatMayThrowExceptions(); 
} catch (SomeException e) { 
} catch (OtherException e) { 
} 

:私は、行の中で何かに見える多くのコードを参照してください。

派生した質問は次のようなものです:もしそれが単なるものであれば、捕捉しようとしている正確なタイプの例外を何らかの形で表す方が良いでしょうか?たとえば、上記の例で

try { 
    number = Integer.parseInt(numberString); 
} catch (Exception e) { 
    // ... 
} 

tryブロックのみNumberFormatExceptionを投げることができます。ここに一般Exceptionをキャッチすることに欠点はありますか?

答えて

5

上記の例では、tryブロックはNumberFormatExceptionをスローするだけです。ここにジェネリック例外をキャッチすることに欠点はありますか?

実際はありません。しかしそれは尋ねることができますによって達成する "正確な例外"を隠す?

NumberFormatExceptionをキャッチすると、スローされる予定の例外を即座に確認できます。

EDIT: Pardon me。上記の例では、チェックされていない例外、つまり例外をスローすることもできます。 NPEを使用しているので、実際にはより多くの例外をキャッチして、すべて同じ方法で処理しています。実際には、これらの例外に対して異なる例外処理を実装したい場合があります(チェックされていない例外をキャッチして処理したい場合でも)。

3

例外をキャッチすると、チェックされていない例外とチェックされている例外がキャッチされます。これにより、例外処理が、意図している以外の方法で状況を管理しようとする可能性があります。

0

いいえ、実際には、さまざまな起こりそうな不測の事態に対してキャッチ条件があるようにするだけです。一般に、Exceptionをキャッチするのは悪いことがあります。これは、操作によってはIOExceptionとSQLExceptionをキャッチする必要があり、それぞれに必要なエラー処理が非常に異なるためです。

ほとんどの状況では、実際にはException用のcatchブロックが必要なので、一般的なエラーハンドラを使用して一般的なプログラムエラーを発生させることができます。それはtry-catch-blockの特定のケースの後に来るはずです。

+0

あなたはすべてのtry/catchブロックでExceptionのキャッチを提唱していますか? –

1

あなたが1年前にアプリを書いて例外が生成され、あなたがコードを見て、それがthrows Exception/} catch (Exception e) {になるのを嫌うなら、それは私のためにすべてのjavadocsを読む必要がありますメソッド内のコードは、どのようなタイプの例外がスローされるかを調べます。

私は、私が扱っているものを知るために、特定の種類の例外を捕捉する傾向があります。 もう1つの例はSQLExceptionです。場合によっては。 sqlesのerrorCodeに応じて、私はデータベース操作を再試行したいのに対し、他のタイプの例外では中止して報告したいと思っています。

関連する問題