这是一些java代码。
public class SomeClass {
private Connection connection;
public SomeClass(Connection c) {
connection = c;
}
public void someWork(){
Connection c;
try {
// do something
} catch (Exception e) {
// some exception code
} finally {
if (conn != null){
try {c.close();} catch (Exception e) {}
}
}
}
}
但我不喜欢代码
if (conn != null){
try {c.close();} catch (Exception e) {}
}
所以我认为代码
...catch (Exception e) {
// some exception code
} finally {
c = null;
}
但我看到“流对象未收集垃圾。”
我不会在finally block 中使用try-catch语句。 请给我另一种方式。
最佳答案
只需创建一个静态实用方法:
private static void closeQuietly(final Connection conn)
{
if (conn == null)
return;
try {
conn.close();
} catch (WhateverException ignored) {
}
}
然后
conn = whatever(); // create it there, not in the try block
try {
// work
} catch (WhateverException e) {
// whatever
} finally {
closeQuietly(conn);
}
但最终,您将在finally block 中使用try/catch。
请注意,捕获异常
是一个坏主意。而是捕获由 conn.close()
专门引发的异常。捕获Exception
意味着您还捕获了所有RuntimeException
;这是一件坏事。
如果你使用Guava,也可以使用Closeables.closeQuietly()
,它的作用与上面的代码几乎相同。您还可以查看Closer
,这很有趣。
最后(双关语):如果您使用 Java 7,请改用 try-with-resources 语句(请参阅 AutoCloseable
):
try (
conn = whatever();
) {
// ...
}
关于java - 我不会在finally block 中使用try-catch 语句。 (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17209873/