关于java:如果它们跟随返回,最终内部的语句会被执行吗?

Will the statements inside finally get executed if they are following return?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
In Java, does return trump finally?

想知道如果finally语句在return语句之后是否仍将被执行?


是的,唯一的例外是Try块中的System.exit(1)


是的,最终会被执行,即使你

1
2
3
4
5
6
7
8
9
10
11
public static void foo() {
        try {
            return;
        } finally {
            System.out.println("Finally..");
        }
    }

    public static void main(String[] args) {
        foo();
   }

输出:

1
Finally..


如果返回语句在其关联的try块之前,则不是。

如果返回语句在关联的try块中,则返回。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void foo(int x)
{
    if (x < 0)
        return; // finally block won't be executed for negative values

    System.out.println("This message is never printed for negative input values");
    try
    {
        System.out.println("Do something here");
        return;    
    }
    finally
    {
        System.out.println("This message is always printed as long as input is >= 0");
    }
}


除其他答案外,如果finally块中有返回,则返回后的语句将不会执行。

1
2
3
4
5
6
7
finally
    {
        System.out.println("In finally");
        if ( 1 == 1 )
            return;
        System.out.println("Won't get printed.);
    }

在上面的代码片段中,"in finally"显示,而"won't get printed"不显示。


最后,只有当我们通过调用System.exit(int)Runtime.getRuntime().exit(int)终止JVM时,块才会失败。


是的,当然。finally语句设计为在任何情况下都可以执行,前提是执行将进入try语句。


是的,最终将在return声明之后执行。