gpt4 book ai didi

java - 像这样嵌套 try/finally 子句安全吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:36 26 4
gpt4 key购买 nike

由于这是关于 try/finally 子句行为的学术问题,因此我尝试使用一个非常通用的示例。像这样嵌套 try/finally 子句有什么危险吗?

openDatabaseConnection();
try {
// Methods unrelated to cursor
// ...

String cursor_id = openCursor();
try {
useCursor(cursor_id);
} finally {
closeCursor(cursor_id);
}

// Methods unrelated to cursor
// ...
} catch (Exception e) {
genericLogError();
} finally {
closeDatabaseConnection();
}

具体来说,我很想知道 closeCursor() 是否保证在 closeDatabaseConnection() 之前被调用。嵌套 finally 子句是否应该被视为不良做法?

最佳答案

是的,这是有保证的。

假设在 useCursor(cursor_id) 期间发生了一些异常,现在 inner finally block 将被执行。 (因为异常发生在内部 try block 中)。在此之后 genericLogError() 将被调用(因为异常发生在包含内部 try 的外部 try 中。并且只有在它之后 closeDatabasConnection() 将被执行(外部 tryfinally)。下面是一个图表,可能会更好地解释它:

(内层try异常→内层try的finally)这被认为是外层try的异常外层try的catch最终的外部尝试。

您可以通过从 block 中打印来测试它。

但为什么不这样做呢?

try {
useCursor(cursor_id);
} catch(Exception e) {
genericLogError();
} finally {
closeCursor(cursor_id);
closeDatabaseConnection();
}

关于java - 像这样嵌套 try/finally 子句安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15473599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com