如何解释异常是否会捕获运行时异常?
2022-08-31 14:27:38
这对我来说很奇怪。 继承自 ,继承自 。RuntimeException
Exception
Throwable
catch(Exception exc) { /* won't catch RuntimeException */
但
catch(Throwable exc) { /* will catch RuntimeException */
我知道这是特别的,因为它是不受控制的。但据我所知,这只适用于是否必须声明例外,而不适用于是否捕获例外。即使这样,我也不知道为什么这种逻辑会在捕捉时中断 。RuntimeException
Throwable
这与我非常相关,因为我有一个可以在终端操作中被抛出的情况。我不确定这个模式的名称,但就像,我的类取一个数组。代码如下所示:RuntimeException
EmailRoller
Callbacks
for(Callback cb : callbacks) {
try {
cb.call(item);
}
catch(Exception exc) {
logger.error("Error in callback: ", exc);
}
}
因此,在这种情况下,像OOME这样的东西需要飞过,因为如果这些回调之一消耗了所有机器内存,那么肯定会影响其他回调的运行。但是一个 ?还是一个?这些将影响回调,但不会阻止其他回调运行。NullPointerException
IndexOutOfBoundsException
此外,这有点像企业设计。不同的程序员或团队可以添加回调来处理项目,但它们应该彼此隔离。这意味着,作为负责将这些回调彼此隔离的程序员,我不应该依赖它们来确保错误不会漏掉。捕捉应该是关于正确的线,但这并不是因为滑过。所以我更一般的问题是:这里什么是好的模式?只是,我认为这是由于继承而导致的语法错误?Exception
RuntimeException
catch(Exception | RuntimeException exc)