java中的多个处理异常

时间:2017-08-10 15:01:44

标签: java logging exception-handling

我需要处理一个特殊的异常和所有其他异常的其余部分,它应该给我们相同的日志信息但是日志记录的级别应该是不同的(前者应该是log.warn,其余部分应该是log.error)

        try {
        }
        catch (someexception e) {
         log.warn("some message")
         -----some code----
        }
        catch(AllotherExceptions e) {
        log.error("same message as above")
        -----same code as above----
        }

这需要最小化,因为消息是相同的,但需要将其余代码作为公共代码而不是多次写入

4 个答案:

答案 0 :(得分:2)

您有几种方法可以这样做。如前面的答案所示,你可以像这样制作连续的catch语句:

try {
    // Code that potentially throws multiple exceptions
}
catch (IOException ex) {
    // Manage this particular exception case
}
catch (Exception ex) {
    // Manage remaining exceptions
}

通过这种方式,您将能够管理特定案例并定义一个点,其中将管理与以下操作相关的所有异常。通过在流程的早期放置try语句(主循环,繁重的服务调用......),您将管理许多异常,但您将无法管理特定情况,因为您不知道哪个特定行动扔了他们。通过包含很少的特定操作(访问文件,请求...),您将能够对这些异常进行非常具体的管理。

正如答案中所指出的,使用Java> = 7,这种语法将起作用:

try {
    // Code that potentially throws multiple exceptions
}
catch (IOException|SQLException ex) {
    // Manage these particular exceptions
}
catch (Exception ex) {
    // Manage remaining exceptions
}

当您需要以完全相同的方式管理不同的异常时,将使用这种方式。当一个动作抛出不同的异常(即访问文件)时,它特别有用,但你只想要特别管理一些特定的错误情况,而不是担心可以引发的一切。

答案 1 :(得分:1)

只需添加几个catch部分,然后使用catch all。

try {
 // Some code
}
catch (IOException ex) {
     logger.log(ex);
     throw ex;
catch (Exception ex) {
     logger.log(ex);
     throw ex;
}

在此处阅读更多内容:Documentation

答案 2 :(得分:0)

以下示例(在Java SE 7及更高版本中有效)消除了重复的代码:

try{

  }
  catch (IOException|SQLException ex) {
        logger.log(ex);
        throw ex;
    }

答案 3 :(得分:0)

从java 7开始,你可以试一试 - Multicatch

    try {
        new Foo("").doSomething();
    } catch (Exception1 | Exception2  e) {
        e.printStackTrace();
    }