在 java 中使用 finally

Use of finally in java

考虑代码

try{
    //code
} catch(Exception e) {
    // handle
} finally {
    // close open connections
}

还有这个

try{
    //code
} catch(Exception e) {
    // handle
}
// close open connections

既然都是一样的,finally块的必要性是什么?

finally 块将始终执行,即使您没有捕获 catch 块中 try 块抛出的所有异常,或者如果 catch 块抛出一个新的异常。

在第二个片段中,如果 trycatch 块抛出未捕获的异常,则不会执行 try-catch 块之后的代码通过 catch 块。

finally 块更安全,因为即使 try 块抛出 catch 块或 [=14] 块未处理的异常,它也能保证执行=]秒。

它还有将所有 "cleanup" 代码组织在预期位置的副作用,使代码(可以说)更易于维护。

顺便说一句,值得注意的是,如果您使用的是 Java 7 或更高版本,并且您正在处理的资源是 AutoCloseable (such as a java.sql.Connection, for example), there's an even cleaner solution - the try-with-resource syntax,这会为您省去明确的麻烦关闭资源:

try (Connection con = /* something */) {
    // code
} catch (SomeException e) {
    // handle
    // If there's nothing intelligent to do, this entire clause can be omitted.
}

finally块用于执行关闭连接、流等重要代码。java中的finally块可用于放置"cleanup"关闭文件、关闭连接等代码。

Java 无论是否处理异常,finally 块总是被执行。

对于每个 try 块,可以有零个或多个 catch 块,但只有一个 finally 块。 如果程序退出(通过调用 System.exit() 或导致导致进程中止的致命错误),则不会执行 finally 块。