代码:
public String get() {
try {
//doSomething
return "Hello";
}
finally {
System.out.print("Finally");
}
public String get() {
try {
//doSomething
return "Hello";
}
finally {
System.out.print("Finally");
}
这段代码是如何执行的?
答案 0 :(得分:17)
因为这是finally
块的整个点 - 它会执行,但是你会离开try
块,除非VM本身突然关闭。
通常finally
块用于清理资源 - 您不希望因为在try
块期间返回而导致文件句柄保持打开状态,是吗?现在你可以在返回语句之前放置清理代码 - 但是如果代码抛出异常则不会清除它。使用finally
,清理代码执行但是你离开了块,这通常是你想要的。
有关详细信息,请参阅JLS section 14.20.2 - 并注意所有路径如何执行finally
块。
答案 1 :(得分:3)
最后 始终 会被执行,无论try块中发生什么(失败,返回,异常,完成等)。
如果您不希望执行此代码,则可以始终将其放在try / catch / finally语句之后。
答案 2 :(得分:0)
这正是finally
的用途:中的代码将在try
块被执行时执行,无论如何(除了JVM通过{{1关闭)或外部原因)。