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

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

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

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


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

编辑:
人们,我知道终于做了什么,我已经使用了很多年了,但我的问题是在上面的例子中, //c最终似乎是多余的,不是吗?


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

  • 如果`try`块中的代码通过`return`退出
  • 如果catch块内的代码重新抛出捕获到的异常,或者 - 意外或故意 - 最终抛出一个新的异常。
  • 如果`try`块内的代码遇到没有捕获的异常。

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

    顺便说一句,我希望语言设计师将包括的一件事情是finally块的exception参数,以处理在异常之后需要清理但仍希望它渗透调用堆栈的情况(例如,可以包装在这样的构造中构造函数的代码,以及如果构造函数将以异常退出,则在建造中Dispose该对象)。


    最后,即使在try块中抛出异常也会执行块。 因此,例如,如果您之前打开过流,则可能需要关闭该流或者引发异常。 最后,block对于这样的问题很有用。


    Finally确保即使遇到异常,您的代码也会执行。

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

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

    链接地址: http://www.djcxy.com/p/73717.html

    上一篇: What is the point of finally in a try catch/except finally statement

    下一篇: Java Try Catch Finally blocks without Catch