如何处理java中的一长串异常

时间:2013-10-06 01:34:38

标签: java

我有一个网络服务器,可以在提供请求时捕获一长串异常。

目前我们有很多例外情况,我们会处理许多catch块。

处理这样的事情是否有最好的做法?

我在考虑像

这样的东西
} catch (Exception e) {
   return handleException(e);
}

Response handleException(Exception e) {
    if (e instanceof DomainException) {
       //DO SOMETHING
    } else if (e instanceof NullPointerException) {
         .
         .
         .

我不确定这是否更干净。有关更好的方法处理它们的任何建议吗?

2 个答案:

答案 0 :(得分:4)

如果您使用的是Java 7,那么您可以使用|来支持您的例外情况在catch区块。例如:

catch (IOException|SQLException ex) 

答案 1 :(得分:1)

Juned提到的Java 7功能非常有用,但我很好奇为什么你首先需要这么多的catch块。无论是Java 7还是其他,请使用该语言的异常功能。

首先,请确保您不必为DomainException等现有例外所解决的情况发明自己的IllegalArgumentException

其次,请记住已检查和未检查的异常之间的区别。已检查的异常派生自RuntimeException的Exception类层次结构的另一端。常见的已检查例外情况为IOExceptionSQLException,必须予以处理。任何继承RuntimeException的东西 - 比如NullPointerException - 都是一个未经检查的异常,不必被捕获或抛出或任何东西。

通常,您使用已检查的异常来解决可恢复的问题(客户端知道会发生什么,可以优雅地处理问题并继续前进)和未经检查的灾难性异常(例如无法连接到数据库)。

如果您可以浏览所有AOP内容,this就如何有效地使用已检查和未检查的异常进行了很好的讨论。我认为那里描述的断层障碍的概念将帮助你大大减少捕获块。无需像在样本中那样捕获NullPointerExceptions。