在这里,我已经在API和其他相关问题中看到了这一点:
try {
} catch (IOException e) {
throw new SampleException("Other IOException", e);
}
调用新例外。
但是现在我已经看到了这个自称的例子。我正在尝试编写文档,似乎它再次调用自己。
try {
statements;
}catch(TheException e) {
//perform operations before exits;
throw e;
}
重新抛出异常,以便其他处理程序有机会 处理异常
我想我们TheException
例外之后我们再添加一个catch
了!那么在这种情况下谁是另一个处理程序?我测试了它,我发现即使编译了catch子句之后的代码!
答案 0 :(得分:2)
尝试修改JAVA中的异常工作方式,尤其是throw/throws
个关键字,以及它们之间的区别。
这是一个很好的page,可以解释这一点。
您可以随时参考documentation了解更多信息。
参考您的问题,您的代码可能无法编译,因为throw
所在的方法可能不会throws TheException
。您可以在方法标题中添加throws TheException
以使其生效,也可以尝试将try/catch
封装在处理(捕获)try/catch
的其他TheException
中。
答案 1 :(得分:2)
那么在这种情况下谁是另一个处理程序?
这几乎就好像catch
子句从未出现过 - 稍微补充一点以后 catch子句将不会被使用。例如:
try {
methodWhichCanThrowIOException();
} catch (IOException e) {
throw e;
} catch (Exception e) {
// This won't be hit for IOException
}
所以:
有关所有详细信息,请参阅JLS的section 11.3和section 14.20。
答案 2 :(得分:1)
假设您有两种方法。
第一个:
public void methodA() throws IOException {
try {
// methodWhichCanThrowIOException();
} catch (IOException e) {
// //perform operations before exits;
throw e;
}
}
第二个:
public void methodB() {
try {
methodA();
} catch (IOException e) {
// //perform operations;
}
}
查看方法B如何调用方法A.最初在方法A中引发的异常是方法A本身的处理程序,但是一旦完成,方法A就决定抛出异常,以便其他处理程序有机会处理异常。其他方法作为方法A.注意方法A可以在不同的层中,在不同的层中。
对于方法A,抛出异常是告知方法B事情发生的好方法。