这称为异常链接。通过将异常包装在不同的异常中,您可以让异常在堆栈中冒泡,而无需让您的主应用程序类担心一些低级异常。
例子:
public void doStuff() throws StuffException {
try {
doDatabaseStuff();
} catch (DatabaseException de1) {
throw new StuffException("Could not do stuff in the database.", de1);
}
}
这样,您的应用程序只需要处理,但如果它真的需要,StuffException它可以到达底层。DatabaseException
要了解您捕获的异常的最底层(和所有其他)异常,您可以迭代其根本原因:
...
} catch (SomeException se1) {
Throwable t = se1;
logger.log(Level.WARNING, "Top exception", se1);
while (t.getCause() != null) {
t = t.getCause();
logger.log(Level.WARNING, "Nested exception", t);
}
// now t contains the root cause
}