3

代码:

public String get() {
try {
     //doSomething
     return "Hello";
}
finally {
     System.out.print("Finally");
}

这段代码如何执行?

4

3 回答 3

17

因为这是一个finally块的全部意义 - 无论您离开该try块,它都会执行,除非 VM 本身突然关闭。

通常finally,块用于清理资源 - 您不希望仅仅因为您在try块期间返回而使文件句柄保持打开状态,对吗?现在您可以将清理代码放在 return 语句之前 - 但如果代码引发异常,则不会清理它。使用,无论finally您离开该块,清理代码都会执行,这通常是您想要的。

有关更多详细信息,请参阅JLS 第 14.20.2 节- 并注意所有路径如何涉及finally块执行。

于 2011-02-10T13:04:35.383 回答
3

最后总是被执行,无论 try 块中发生什么(失败、返回、异常、完成等)。

如果您不希望执行此代码,则始终可以将其放在 try/catch/finally 语句之后。

于 2011-02-10T13:04:42.983 回答
0

这正是finally它的目的:当块离开时,内部的代码执行try,无论如何(除了 JVM 通过System.exit()或外部原因关闭)。

于 2011-02-10T13:06:05.583 回答