2016-09-13 4 views
0

は、サンプルコードを考えてみましょう:catchブロックでcatchオブジェクトを呼び出した後でも、例外オブジェクトを呼び出しメソッドにスローできますか?

public void someMethod() throws Exception{ 
    try{ 
     int x = 5/0; //say, or we can have any exception here 
    } 
    catch(Exception e){ 
     if(counter >5){ // or any condition that depends on runtime inputs 
     //something here to throw to the calling method, to manage the Exception 
     } 
     else 
     System.out.println("Exception Handled here only"); 
    } 
} 

したがって、この可能性のようなものはありますか? 「はい」の場合、「ここに何かを呼び出して例外を管理する何か」の代わりに何が出てくるのか...

I.E.私の質問は、このように条件付きで管理することができ、ここで例外を処理するかどうかです。

+2

ちょうどそれを投げる? – user2357112

+0

それを投げているだけではない –

答えて

3

確かに、あなたはあなたのcatchブロックがない問題で投げることができます。独自の有益な例外にレイヤーを作成し、例外の因果チェーンを維持することもできます。

コンストラクタを使用します。あなたは特別なRetryLimitReachedExceptionを持っていたとしましょうたとえば、あなたは、このクラスは、それを処理することができませんでした、そしてそれは、バックアップ合格したことをはっきりと確認することができますあなたのスタックトレースでそう

catch (Exception e) { 
    if (counter > 5) { 
    throw new RetryLimitReachedException("Failed to do X, retried 5 times", e); 
    } 
.... 
} 

ようにそれを放り出すことができ。また、スタックトレースの行(Caused By. . .)で処理不能な例外条件の原因を正確に把握できます。

1

確かに、あなただけの例外を再スローすることができますキャッチ:

catch (Exception e) { 
    if (counter > 5) { 
     throw e; // Rethrow the exception 
    } 
    else { 
     System.out.println("Exception Handled here only"); 
     // Or something more meaningful, for that matter 
    } 
} 
関連する問題