Java 如何确保一段代码在方法退出之前运行

Java 如何确保一段代码在方法退出之前运行,java,closures,Java,Closures,我有一个if-else的方法,以及多个return语句,具体取决于具体的流 我有一行代码需要在return语句之前执行(例如releaseResources) 我想确保无论发生什么情况,都会执行这一行 在java中有没有一种很好的方法? 确保在结束之前执行一段代码的东西 根据您使用的编程语言,try-catch最终存在: 当try-catch条件结束时,Finally语句将启动 很抱歉编辑您要查找的是一个try finally块。以下是一个例子: public Something someMe

我有一个if-else的方法,以及多个return语句,具体取决于具体的流

我有一行代码需要在return语句之前执行(例如releaseResources)

我想确保无论发生什么情况,都会执行这一行

在java中有没有一种很好的方法?
确保在结束之前执行一段代码的东西

根据您使用的编程语言,try-catch最终存在:

当try-catch条件结束时,Finally语句将启动


很抱歉编辑

您要查找的是一个try finally块。以下是一个例子:

public Something someMethod() {
    try {
        if(someStatement) {
            return new Something();
        } else {
            return new SomethingElse();
        }
    } finally {
        // this is always executed, even if there is an Exception
    }
}
问题是这是否真的是你想要的。如果代码有两个方法,那么听起来您的代码实际上可能会更好(可读性更强)。像这样:

public Something createSomething() {
    if(someStatement) {
         return new Something();
    } else {
        return new SomethingElse();
    }
}

public Something someMethod() {
    Something something = createSomething();
    // Do the thing that always needs to be done
    return something;
}
这将您正在做的事情分为两种方法。现在,如果问题是第一个方法可以抛出异常,而您仍然想做一些事情,那么您仍然可以使用finally。但是捕获和处理异常可能更好

另外:您注意到要关闭一个资源。在这种情况下,我建议您研究一下try with resources:

这里举一个例子:

private String someMethod() throws IOException {
    // Java automatically closes the following Readers:
    try (BufferedReader br =
               new BufferedReader(new FileReader("/path"))) {
        return br.readLine();
    }
}

如果您真的需要,可以使用
try/finally

try {
    if (...) return ...;
    else if (...) return ...;
    else return ...;
} finally {
    doSomething();
}

当您离开
try
块时,
finally
块中的代码将始终执行,特别是在任何
return
语句中。

即使引发异常,也将始终执行
finally

try {
     ...
     if () {
         return;
     else {
         return;
     }
} finally {
    // Release resources
}

一个主要的编程良好实践是,每个方法都应该有并且只有一个返回语句。如果您有许多可能的值,则倾向于将该值保留在对象中,并在最后返回该值

例如:

应该是这样做的

public int func(boolean condition) {
    int num; 

    if(condition) {
        num = 1;
    } else {
        num = 0;
    }

    return num;
}

正如您可能看到的,以这种方式确保在返回之前调用方法非常简单,将其添加到唯一的返回之前。

使用try{}finally{}finally不仅适用于异常处理,它还允许程序员避免清除代码被返回、继续或中断意外绕过。
public int func(boolean condition) {
    int num; 

    if(condition) {
        num = 1;
    } else {
        num = 0;
    }

    return num;
}