'throw'和'throw new Exception()'之间的区别

216

什么是两者之间的区别?

try { ... }
catch{ throw }

try{ ... }
catch(Exception e) {throw new Exception(e.message) }

不管第二个显示了什么信息。


71
第二段是我见过的最邪恶(但看似无害)的代码之一。 - SLaks
https://dev59.com/0nVD5IYBdhLWcg3wTZxm - dotjoe
1
这回答了你的问题吗?“throw”和“throw ex”有什么区别? - Jim G.
12个回答

0

如果你想的话,可以抛出一个新的异常,将原始异常设置为内部异常。


0

throwthrow ex,两者都用于抛出或重新抛出异常,当您只需简单记录错误信息并且不想向调用方发送任何信息时,您只需在catch中记录错误并离开即可。

但是,如果您想向调用方发送有关异常的一些有意义的信息,则使用throw或throw ex。现在,throw和throw ex之间的区别在于throw保留堆栈跟踪和其他信息,但是throw ex创建一个新的异常对象,因此原始堆栈跟踪会丢失。

那么我们什么时候应该使用throwthrow e?仍然有一些情况可能需要重新抛出异常,例如重置调用堆栈信息。

例如,如果该方法位于库中,并且您希望隐藏库的详细信息以避免暴露给调用代码,您不一定希望调用堆栈包含库内部私有方法的信息。在这种情况下,您可以在库的公共方法中捕获异常,然后重新抛出它们,以便调用堆栈从这些公共方法开始。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接