我知道finally
的目的是保证一些指令或清理代码得到执行。但是使用finally
和将代码放在catch块之后的实际区别是什么呢?
我的意思是,给我一个例子,你需要使用finally
,否则代码可能根本无法执行。
不管catch块中发生了什么,Finally都将执行。
catch(Exception E)
{
...
throw new OtherException(BetterMessage, E);
}
或
catch { return null; }
或
catch { SomeMethodThatWillThrowAnException(); }
因此,即使返回或抛出异常以退出Catch块,仍将执行finally块,而try-catch之后的任何代码将被忽略。
无论如何最后执行。
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"会被打印出来。
finally block无论如何都会触发,即使你throw and catch。位于catch之后的代码如果不在finally块中,则可能不会执行,例如,如果您的catch可能导致进程结束或应用程序崩溃。
无论是否抛出异常,都执行finally
块。
你的问题是,使用finally
和将代码放在catch
块之后的区别是什么。如果抛出异常,则不会执行catch
块之后的代码。如果您将代码放在finally
块中,它将。
可能会出现一些您无法捕获的异常。
finally
块保证内部代码的执行,即使抛出意外异常。