尽管在try块中使用return,为什么finally块中的语句仍然执行

时间:2014-09-05 13:24:15

标签: java

我不明白为什么尽管在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");

    }

}
}

4 个答案:

答案 0 :(得分:2)

无论你在try中做了什么,即使你从try块返回,finally块也会一直执行。

来自finally docs

  

运行时系统始终执行finally块中的语句,无论是否在try块中发生了什么。因此,它是进行清理的理想场所。

有趣的学习:当你在谈论回归和尝试 - 终极。只是把回归试试,最后再回来。看看会发生什么:)

答案 1 :(得分:2)

因为这就是设计的目的。它与catch (...)一样(只有在其他地方没有捕获时才会执行)。

finally在清理资源方面非常有用:它是Java引入RAII类型功能的一种方式,这种功能在其他语言(如析构函数)中更为普遍。 Java更自然地通过垃圾收集器执行清理,但finally允许另一种方法。

答案 2 :(得分:1)

最后将永远执行。您可以尝试使用一些条件(if,else)语句。

答案 3 :(得分:0)

  

尽管在try块

中使用return,为什么finally块中的语句仍然执行

按设计。 finally块的重点在于 如何离开try块,finally中的代码将会运行。完全停止。 (好吧,除非你崩溃JVM。)