What is the difference between try-finally and try-catch-throw?
因此,我从这个问题了解到,即使发生异常,即使异常未被捕获并允许向上传播,也可以使用
我从这个问题了解到,在c中,
那么,我的问题是,这两个街区有什么区别:
1 2 3 4 5 6 7 | /* example 1 */ try { /* try stuff */ } finally { /* finally/catch stuff */ } /* example 2 */ try { /* try stuff */ } catch { /* finally/catch stuff */ throw; } |
不要同时运行
在
1 2 | try { /* try stuff */ } catch { /* finally/catch stuff */ throw; } |
当没有错误的时候,最后的东西就不会运行了。
使用
你真的错过了这一点,只有
像这样想…
1 2 3 4 5 6 7 8 9 10 11 12 13 | try { //do some stuff } catch { //do some stuff if there was an exception //maybe some cleanup, maybe rethrow exception } finally { //always do this stuff exception or not } |
不管您的代码是否引发异常,finally都将运行,但我的理解是(我可能是错的),如果您重新抛出一个未处理的catch,它可能不会运行。当您需要整理时,不管是否发生错误(如处理连接),最后一个都很有用。
第二个示例将只在catch中运行代码,或者如果代码不引发异常。在这种情况下,我会去掉试捕获,让它冒泡,让试捕获更高。
不同的是,无论是否有异常,最终块都始终被执行,而catch块只在有异常时执行。
只有当