try-catch-finally,返回后再返回

时间:2014-03-20 12:31:42

标签: java return try-catch try-catch-finally finally

我知道如何尝试,捕获&最后工作(大多数情况下),但我有一件事我想知道:在try-catch-finally之后返回语句会发生什么,而我们已经在try(或catch)中返回了一个?

例如:

public boolean someMethod(){
    boolean finished = false;
    try{
        // do something
        return true;
    }
    catch(someException e){
        // do something
    }
    finally{
        // do something
    }
    return finished;
}

让我们说尝试中没有出错,所以我们回复了。然后我们将去最后我们做的事情,比如关闭连接,然后呢?

在我们在finally中执行了一些操作之后,方法是否会停止(因此方法在try中返回true),或者方法将在finally之后继续,导致返回 finished (这是假)?

提前感谢您的回复。

5 个答案:

答案 0 :(得分:16)

执行finally块的事实并不会使程序忘记您返回。如果一切顺利,finally块之后的代码将无法执行。

这是一个明确的例子:

public class Main {

    public static void main(String[] args) {
        System.out.println("Normal: " + testNormal());
        System.out.println("Exception: " + testException());
    }

    public static int testNormal() {
        try {
            // no exception
            return 0;
        } catch (Exception e) {
            System.out.println("[normal] Exception caught");
        } finally {
            System.out.println("[normal] Finally");
        }
        System.out.println("[normal] Rest of code");
        return -1;
    }

    public static int testException() {
        try {
            throw new Exception();
        } catch (Exception e) {
            System.out.println("[except] Exception caught");
        } finally {
            System.out.println("[except] Finally");
        }
        System.out.println("[except] Rest of code");
        return -1;
    }

}

输出:

[normal] Finally
Normal: 0
[except] Exception caught
[except] Finally
[except] Rest of code
Exception: -1

答案 1 :(得分:7)

如果一切顺利,在执行try区块后执行finally内部的返回。

如果在try内出现问题,则会捕获并执行exception,然后执行finally阻止,然后执行返回。

答案 2 :(得分:3)

在这种情况下,finally中的代码会运行,但是当没有异常时会跳过另一个返回。 你也可以通过记录东西来看到这个:)

另见System.exitHow does Java's System.exit() work with try/catch/finally blocks?

看到从最后回来: Returning from a finally block in Java

答案 3 :(得分:2)

public int Demo1()
    {
        try{
            System.out.println("TRY");
            throw new Exception();
            }catch(Exception e){
                System.out.println("CATCH");
            }finally{
                System.out.println("FINALLY");
            }return 0;

    }

调用此方法的输出就像这样

TRY
CATCH
FINALLY
0

意味着将Try{}catch{}finally{}视为逐个执行的语句序列在这种特殊情况下。 而不是控制权返回。

答案 4 :(得分:0)

当然try中的代码将执行..但是当它到达return语句时...它将移动到finally块而不执行try块中的return语句..然后将执行finally的代码然后执行return语句将执行。