0

我知道finally的目的是保证某些指令或清理代码得到执行。但是finally在 catch 块之后使用或放置代码的实际区别是什么。
我的意思是,给我一个你需要使用的例子,finally否则代码可能根本无法执行。

4

5 回答 5

4

无论 catch 块中发生了什么,finally 都会执行。存在几种情况。

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

或者

catch { return null; }

或者

catch { SomeMethodThatWillThrowAnException(); }

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

于 2014-05-22T20:45:13.137 回答
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”。

于 2014-05-22T20:50:08.990 回答
0

可能会发生一些您不会捕获的异常。finally即使抛出意外异常,块也能保证执行其中的代码。

于 2014-05-22T20:50:05.227 回答
0

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

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

于 2014-05-22T20:43:53.037 回答
0

无论如何,finally 块都会触发,即使你投掷和接球也是如此。不在 finally 块中的 catch 之后放置的代码可能不会执行,例如,如果您的 catch 可能导致进程结束或应用程序崩溃。

于 2014-05-22T20:42:23.767 回答