有人能简要说明一下
可以举个例子简要说明吗?
throw
和throw ex
之间的区别吗?我看到throw
会存储先前的异常,但不理解这一行。可以举个例子简要说明吗?
throw
重新抛出被捕获的异常,并保留堆栈跟踪。throw ex
抛出相同的异常,但是重置堆栈跟踪到该方法。throw
通常是更好的选择,因为您可以看到异常的起源。try
{
// do stuff
}
catch(Exception ex)
{
throw;
}
没有意义。这与根本没有try/catch
的行为完全相同。
throw会重新抛出原始异常;
throw ex会创建一个新的异常,因此堆栈跟踪会改变。通常意义不大,一般情况下你应该只是抛出异常,或者创建一个新的异常并将其抛出,例如:
// not a great code, demo purposes only
try{
File.Read("blah");
}
catch(FileNotFoundException ex){
throw new ConfigFileNotFoundException("Oops", ex);
}
throw new Exception...
,通常只有在被现有代码逼到绝境时才会使用。如果我有时间/权限更改上游代码,我会尝试重构以避免需要使用此模式。然而,我偶尔也会在全新的代码中使用此模式。 - Andrew Steitz
catch
块中,不带参数的throw
用于重新抛出引起catch
的异常。 - Jodrell