2017-06-27 24 views
0

コードがあります。これは3種類の例外をスローすることができますが、すべての実行時例外が拡張されています。実行時例外処理の種類が異なります

したがって、これらの3つの例外を別々のキャッチで個別にキャッチすると、例外が発生したために別のキャッチに移動します。

3つはすべてRuntimeExceptionsなので、疑いがあります。実行時例外ですが、投げられたのと同じ例外ではないので、最初のキャッチになります。

+1

あなたの質問は今ですか? –

+0

クール..あなたは何か質問がありますか? – Akshay

答えて

1

短い答え:いいえあなたのcatchブロックはそれが捕捉されるはずのものをキャッチします。あなたはAwesomeRuntimeExceptionをキャッチするように指示する、それはそれらをキャッチします。どちらも同じクラスを拡張しているので、それはDistastefulRuntimeExceptionをキャッチする方法から外に出ません。

Carオブジェクトの配列を作成してからBikeオブジェクトを挿入するのと同じように、両方ともVehicleに拡張されているためです。

4

答えはかなり簡単です:

  • したい/例外のために異なる処理を行うことができ、それは、その個別のcatchブロックを必要と
  • あなただけのログのように(一般的な何かをするとき例外)、単一のcatchブロックがジョブを実行します。

つまり、これは要件に完全に依存します。異なる例外処理が必要な場合は、別個のcatchブロックが必要です。

だから、ポイントはあなたがどちらかこのだろう、です:NPEのようなキャッチ何かが本当にお勧めしません

try { 
    ... 
} catch (IllegalArgumentException iae) { 
    ... 
} catch (NullPointerException ne) { 
    ... 
... 

または

try { 
    ... 
} catch (RuntimeException r) { 
    ... 
} 
... 

(;私はちょうどそれを使用しますいくつかのRuntimeExceptionの例として)

関連する問題