我不明白为什么尽管在try块中使用了return语句,finally块中的语句仍然被执行。据我所知,return语句将执行返回给main。
如果在try块中使用return,则意味着try的执行在该点结束,并且控制进入main。那么为什么最终的声明会被执行?
class a
{
public static void main(String arr[])
{
try
{
System.out.println("hello1");
return;
}
finally
{
System.out.println("hello2");
}
}
}
答案 0 :(得分:2)
无论你在try
中做了什么,即使你从try块返回,finally块也会一直执行。
来自finally
docs
运行时系统始终执行finally块中的语句,无论是否在try块中发生了什么。因此,它是进行清理的理想场所。
有趣的学习:当你在谈论回归和尝试 - 终极。只是把回归试试,最后再回来。看看会发生什么:)
答案 1 :(得分:2)
因为这就是设计的目的。它与
finally
在清理资源方面非常有用:它是Java引入RAII类型功能的一种方式,这种功能在其他语言(如析构函数)中更为普遍。 Java更自然地通过垃圾收集器执行清理,但finally
允许另一种方法。
答案 2 :(得分:1)
最后将永远执行。您可以尝试使用一些条件(if,else)语句。
答案 3 :(得分:0)
尽管在try块
中使用return,为什么finally块中的语句仍然执行
按设计。 finally
块的重点在于 如何离开try
块,finally
中的代码将会运行。完全停止。 (好吧,除非你崩溃JVM。)