在我的应用程序中,我看到显示的日志
Exception1
caused by: Exception2
caused by: Exception3
所以,如果我想使用try-catch处理这个场景,我应该在catch块中给出哪个异常?我正在使用JDK 1.6,单个catch用于多个异常不是我的解决方案。使用多捕获块是我的最后选择。
答案 0 :(得分:2)
你应该抓住Exception1
,因为这是抛出的最后一个异常。
第一个Exception3
被抛出并被抓住了。捕获它的catch块抛出了Exception2
。
然后Exception2
被抓住了。抓住它抓住了Exception1
。
答案 1 :(得分:1)
您所看到的是捕获特定级别的异常并抛出新异常以便更好地理解捕获异常的异常上下文的好方法。然而,包含来自较低级别异常的信息通常是有用的。这被称为Chained Exceptions。
例如,您可以在收听套接字时捕获IOException
,然后抛出(自定义)NetworkException
以进一步区分它,同时将其传递到捕获并可能重新生成的位置试。
在您的情况下,您只需要抓住Exception1
。您可以使用其原因作为提示如何处理异常。
答案 2 :(得分:0)
如果你想在每个异常的情况下进行通用处理,你需要捕获在你的情况下Exception1
的顶级异常
如果您想为每个例外做特定的事情,您应该单独处理每个例外
答案 3 :(得分:0)
解决此问题的标准方法是捕获代码导致的每个异常。 最糟糕的方式这样做是为了捕捉普通班Exception
。像这样:
try {
MyObject.doAThingThatCausesAnException();
} catch (Exception ex) {
//handle your exception here
}
这是不你想用你的代码做什么,因为它一般。 捕获每个异常,这将使用像这样的自己的catch块抛出。
try {
MyObject.doAThingThatCausesAnException();
} catch (NullPointerException ex1) {
//handle that exception
} catch (SQLException ex2) {
//handle that exception
}
//and so on...
我建议使用编程风格(第二种),因为您不会忘记要处理的任何异常,并且您可以在异常之间进行特定划分。