繁体   English   中英

Java中的多个处理异常

[英]Multiple Handling Exceptions in java

我需要处理一个特定的异常以及所有其他异常的其余部分,这应该给我们相同的日志记录信息,但是日志记录的级别应该不同(前者应该是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----
        }

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

您有几种方法可以这样做。 如先前的答案所示,您可以像这样连续进行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
}

当您需要以完全相同的方式管理不同的异常时,可以使用这种方式。 当单个操作会引发不同的异常(即访问文件)但您只想管理一些特定的错误情况而又不必担心会引发的所有问题时,这特别有用。

您可以使用多个catch块来完成此操作,最后捕获Exception (所有检查的异常的基类)。 例如:

try {
    // Your code here.
} catch (SpecificException e) {
    log.warn("Warning!", e);
} catch (AnotherSpecificException e) {
    log.warn("Another warning!", e);
} catch (Exception e) {
    log.error("Error!", e)
}

只需添加几个捕获部分,然后全部捕获即可。

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

在此处阅读更多信息: 文档

try{
//try something
} catch (SomeTypeException e){
//things
} catch (AnotherException e){
//AnotherThings
}

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

try{

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

从Java 7开始,您可以尝试try-Multicatch

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM