我知道finally
的目的是保证执行某些指令或清理代码。但是使用finally
或将代码放在catch块之后的实际差异是什么
我的意思是,举个例子说明你需要使用finally
,否则代码可能根本不会执行。
答案 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
块保证在其内部执行代码,即使抛出了意外异常。