也许这很显而易见,但我仍然无法理解 throw
和 rethrow
之间的区别以及何时应该使用它们?
rethrow
语句,而不是使用throw
抛出相同的异常对象。 rethrow
保留了异常的原始堆栈跟踪。 另一方面,throw
会将堆栈跟踪重置为最后一个抛出的位置。不好的例子:
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 e
而不是rethrow
,堆栈跟踪会发生什么变化? 您能否提供一个个人示例,说明何时使用它们中的任何一个? - user13848261