这可能是显而易见的,但我仍然无法理解
throw
和 rethrow
之间的区别以及何时应该使用其中任何一个?
根据有效飞镖:
如果您决定重新抛出异常,最好使用
语句,而不是使用rethrow
抛出相同的异常对象。throw
保留异常的原始堆栈跟踪。rethrow
另一方面将堆栈跟踪重置到最后抛出的位置。throw
最大的区别是保留原始堆栈跟踪。
他们提供了 2 个示例来展示预期用途:
坏:
try {
somethingRisky();
} catch (e) {
if (!canHandle(e)) throw e;
handle(e);
}
好:
try {
somethingRisky();
} catch (e) {
if (!canHandle(e)) rethrow;
handle(e);
}
回复有点晚了,但我想这会对现在或将来的人有所帮助。 处理异常的抛出和重新抛出。
当您遇到异常并在代码中启动引发异常的过程时,将使用throw
关键字。更多的是表明发生了异常。
当您想要将异常向上传播到堆栈时,可以使用 rethrow
关键字。更像是捕获异常并执行一些处理并传播到堆栈内的更高级别处理程序。
总结
throw
rethrow
throw 用于发起异常。它可以在代码中任何适合异常的地方使用。 rethrow 在 catch 块中使用以重新抛出捕获的异常。它允许您在调用堆栈的某一级别处理异常,然后将其传递以进行进一步处理。