尝试-捕捉-最后与返回后它

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

例如:

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

假设在尝试中没有出错,所以我们返回了 true。然后我们将转到最后,在那里我们做一些事情,比如关闭一个连接,然后?

在我们在最后做了一些事情之后,方法会停止(所以方法在尝试中返回true),还是会在最后再次返回后继续,导致返回完成(这是假的)?

提前感谢您的回复。


答案 1

执行最终块的事实不会使程序忘记您返回。如果一切顺利,则不会执行最终块之后的代码。

下面是一个示例,可以清楚地说明这一点:

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

答案 2

如果一切顺利,则在执行块后执行内部返回。tryfinally

如果 内部出现问题,则捕获并执行块,然后执行块,然后执行其后的返回。tryexceptionfinally