2017-08-10 80 views
1

我需要处理特定的异常和其他所有异常,它应该给我们相同的日志信息,但日志记录的级别应该不同(前者应该去log.warn,剩下的他们应该去log.error)java中的多重处理异常

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

这需要minimalized的消息是相同的,但需要做的代码作为公共代码的其余部分,而不是写几次

+0

请详细说明一个例子。更好 - 向我们展示您迄今为止所做的工作,并解释您希望我们帮助您改进的内容。 –

+0

所以你想要以不同的方式处理单独的异常?或者你想一次处理所有的问题? @Emoji – cunniemm

+0

使用'try {...} catch(MyFirstException mfe){} catch(MySecondException mse){}' – Nathan

回答

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

您可以使用多个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) 
} 
1

只需添加几闭锁段和一个包罗万象的完成。

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

在这里阅读更多:Documentation

0

下面的例子,这是有效的Java SE 7中和后,消除了重复代码:

try{ 

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

由于Java 7,你可以做一个尝试-Multicatch

try { 
     new Foo("").doSomething(); 
    } catch (Exception1 | Exception2 e) { 
     e.printStackTrace(); 
    } 
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 
} 

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

+0

消息是相同的,但需要发送代码的其余部分作为通用代码而不是写它几次 – Emoji

+0

不知道我是否完全明白你愿意做什么,但也许第二种管理异常的方式我把我的答案放在关键:只要把你认为是警告的每一个异常和另一个异常都捕捉出来,那么每个异常都是错误 –

+0

你可以在帖子中查看修改过的代码。我需要将相同块的代码作为单个时间给出,而不是给出相同的代码几次 – Emoji