我需要处理一个特殊的异常和所有其他异常的其余部分,它应该给我们相同的日志信息但是日志记录的级别应该是不同的(前者应该是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----
}
这需要最小化,因为消息是相同的,但需要将其余代码作为公共代码而不是多次写入
答案 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();
}