Exception
我在这里看到了许多关于和之间区别的一般问题Throwable
。我知道区别,我有一个更具体的问题。
我正在编写一个库,它将多个用户提供的代码绑定并运行在一起。如果其中一个部分失败,则丢弃整个计算。为了保持资源使用干净,用户还可以提供在此类事件发生时运行的终结器。模式是这样的:
try {
// process ...
} catch (Exception ex) {
runRegisteredFinalizers();
throw ex;
}
我的问题是:我应该像上面那样拦截并重新抛出Exception
s,还是应该也拦截Throwable
s? 如果Error
发生,是否有机会
- JVM会恢复吗?(那么运行终结器有什么意义吗?)
- JVM 将处于实际上可以运行它们的状态吗?
此外,在运行终结器时,我会捕获并忽略它们的异常,以便其他注册的终结器有机会运行,例如:
try {
finalizer.run();
}
catch (Exception ex) {
log.error("Exception in a finalizer", ex);
}
同样,我应该只截取Exception
s,还是也截取Throwable
s?忽略而不是重新抛出Error
s 似乎更有问题。