“Rethrow”到下一个捕获条款

时间:2013-10-09 08:20:11

标签: java exception try-catch

如果有一个带有多个catch-blocks的try-catch,是否有办法重新抛出下一个(不是底层)catch-clause的异常?

示例:

try {

  // some exception can occur here

} catch (MyException ex) {

  // do something specific

  // rethrow ex to next catch

} catch (Exception ex) {

  // do logging stuff and other things to clean everything up
}

当抛出MyException时,我想处理该异常的特定内容,但后来我想处理一般的异常(catch (Exception ex))。

我不想使用finally-block和Java 7 Multi-catch在这里也没有帮助。

任何想法如何处理这个,我想避免每个catch块中的冗余东西。是否最好只捕获Exception,然后使用instanceof作为我的特定内容?

感谢。

5 个答案:

答案 0 :(得分:4)

public void doStuff()
{
   try
   {

     // some exception can occur here

   } catch (MyException ex){

     // do something specific

     cleanupAfterException(ex);

   } catch (Exception ex) {

     cleanupAfterException(ex);
   }
}

private void cleanupAfterException(Exception ex)
{
   //Do your thing!
}

我认为这样的事情可以吗?

答案 1 :(得分:2)

你可能想尝试这样的事情:

try
{

}
catch(Exception ex)
{
    if(ex instanceof MyException)
    {
        // Do your specific stuff.
    }
    // Handle your normal stuff.
}

答案 2 :(得分:1)

您可以嵌套try语句:

try {
  try {

    // some exception can occur here

  } catch (MyException ex) {

    // do something specific

    // rethrow ex to next catch

  }
}  catch (Exception ex) {

  // do logging stuff and other things to clean everything up
}

虽然我担心这是你说“(不是底层)”的意思吗?

答案 3 :(得分:0)

您可以尝试多次尝试捕获:

try {

} catch(MyException ex) {
    try {

    } catch(Exception ex) {

    }
}

答案 4 :(得分:0)

当然这是函数的用途吗?

try {
    doStuff();
} catch ( MyException e ) {
    doMyExceptionStuff();
    doGeneralExceptionStuff();
    throw e;
} catch ( Exception e ) {
    doGeneralExceptionStuff();
}