关于finally块

时间:2014-05-22 20:39:58

标签: java try-catch-finally finally try-finally

我知道finally的目的是保证执行某些指令或清理代码。但是使用finally或将代码放在catch块之后的实际差异是什么 我的意思是,举个例子说明你需要使用finally,否则代码可能根本不会执行。

5 个答案:

答案 0 :(得分:4)

最后将执行catch块中发生的事情。有几种情况。

catch(Exception E)
{
    ...
    throw new OtherException(BetterMessage, E);
}

catch { return null; }

catch { SomeMethodThatWillThrowAnException(); }

因此,即使您返回或抛出异常以退出Catch块,您仍将执行finally块,而在try-catch之后的任何代码都将被忽略。

答案 1 :(得分:1)

无论如何最终都会执行。

一个例子

public void test() {
    try { 
       int x = 0;
       return;
    } catch(Exception ex) { 
       ex.printStackTrace();
    } finally { 
      System.out.println("Hello from finally");
    }  

    System.out.println("Hello from after catch");
}

在这种情况下,“Hello from after catch”将不会被打印,但“Hello from finally”将会。

答案 2 :(得分:0)

即使你扔掉并抓住,最后一块也无论如何都要开火。放在不在finally块中的catch之后放置的代码可能不会执行,例如,如果catch可能导致进程结束或应用程序崩溃。

答案 3 :(得分:0)

无论是否抛出异常,都会执行finally块。

您的问题是,使用finally和将代码放在catch之后有什么区别。如果抛出异常,则catch块之后的代码将不会被执行。如果您将代码放在finally块中,它将会。

答案 4 :(得分:0)

可能会出现一些您无法捕获的异常。 finally块保证在其内部执行代码,即使抛出了意外异常。