最后在try catch / finally语句除外的意义是什么?

多年来,我已经在很多语言中使用了try-catch / except-finally变体,今天有人问我最后是什么意思,我无法回答。

基本上,你为什么最后要发表声明,而不是把它放在整个try-catch块之后呢? 换句话说,下面的代码块有区别:

try{ //a} catch {//b} finally {//c} try{//a} catch{//b} //c 

编辑:
人们,我终于明白了,我已经使用了很长时间了,但是我的问题是在上面的例子中, //c最后似乎是多余的,不是吗?

finally块的目的是为了确保代码在三种情况下运行,而这些情况不会很干净地只用“catch”块来处理:

  1. 如果`try`块中的代码通过`return`退出
  2. 如果catch块内的代码重新抛出捕获到的exception,或者 – 意外或故意 – 最后抛出一个新的exception。
  3. 如果`try`块中的代码遇到没有捕获的exception。

可以在每次return或抛出之前复制finally代码,并在自己的try / catch中包装catch块以允许意外exception的发生,但是放弃所有这些并简单地使用finally块就容易得多。

顺便说一句,我希望语言devise师将包括将是一个exception参数finally块,以处理的情况下,需要清理exception后,但仍然希望它过滤调用堆栈(例如,可以包装在这样的构造中构造函数的代码,并且如果构造函数将以exception的forms退出,则在构造下Dispose该对象)。

Finally确保你的代码被执行,即使你得到一个exception。

finally块用于清理try块中分配的任何资源,以及运行即使有exception也必须执行的任何代码

http://msdn.microsoft.com/en-us/library/zwc8s4fz(v=vs.80).aspx

最后,即使在try块中抛出exception也会执行块。 因此,例如,如果您以前打开过stream,则可能需要closures该stream或者抛出exception。 最后块对于这样的问题是有用的。

    Interesting Posts