为什么finally中的代码会执行,即使它已经在try块中返回?

Hes*_*sey 3 java finally try-catch

码:

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

这段代码是如何执行的?

Jon*_*eet 17

因为这是一个finally块的整个点- 它会执行,但是你会离开try块,除非VM本身突然关闭.

通常,finally块用于清理资源 - 您不希望因为在try块中返回而使文件句柄保持打开状态,是吗?现在你可以在返回语句之前放置清理代码 - 但是如果代码抛出异常则不会清除它.使用finally,清理代码执行但是你离开块,这通常是你想要的.

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