代码:
public String get() {
try {
//doSomething
return "Hello";
}
finally {
System.out.print("Finally");
}
这段代码如何执行?
因为这是一个finally
块的全部意义 - 无论您离开该try
块,它都会执行,除非 VM 本身突然关闭。
通常finally
,块用于清理资源 - 您不希望仅仅因为您在try
块期间返回而使文件句柄保持打开状态,对吗?现在您可以将清理代码放在 return 语句之前 - 但如果代码引发异常,则不会清理它。使用,无论finally
您离开该块,清理代码都会执行,这通常是您想要的。
有关更多详细信息,请参阅JLS 第 14.20.2 节- 并注意所有路径如何涉及finally
块执行。
最后总是被执行,无论 try 块中发生什么(失败、返回、异常、完成等)。
如果您不希望执行此代码,则始终可以将其放在 try/catch/finally 语句之后。
这正是finally
它的目的:当块离开时,内部的代码将执行try
,无论如何(除了 JVM 通过System.exit()
或外部原因关闭)。