java - Java 1.6 中清理资源的首选方法

标签 java idioms

我经常看到这种类型的资源清理:

InputStream in = null;
try {
    in = new FileInputStream(file);
    // ...
} finally {
    if (in != null) {
        in.close();
    }
}

我一直使用以下风格:

final InputStream in = new FileInputStream(file);
try {
    // ...
} finally {
    in.close();
}

但是我错过了什么吗?前者有我没有看到的优点吗?

最佳答案

我怀疑它是为了避免有两个嵌套的 try/catch block 而不是一个。

InputStream in = null;
try {
    in = new FileInputStream(file);
    // ...
} catch(IOException ioe) {
    // handle exception.
} finally {
    IOUtils.closeQuietly(in);
}

第二种情况不完整。

try {
    final InputStream in = new FileInputStream(file);
    try {
        // ...
    } finally {
        in.close();
    }
} catch(IOException e) {
    // handle exception
}

如果您有多个文件,这可能会变得非常困惑。

关于java - Java 1.6 中清理资源的首选方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12199711/

相关文章:

java - WADL2JAVA:Gradle插件

java - 语法错误,在Eclipse中导入TestNG的@Test注释时插入 "EnumBody"以完成ClassBodyDeclarations错误

java - Apache Felix DOSGI 单一包和 Zookeeper

java - 使用Java在 map 中自动创建缺失值的成语

performance - F# 惯用性能

java - 如何将我的应用程序的大小设置为与图像相同

java - 正则表达式检查字符串是否仅包含数字不起作用

scala - 在 scala.immutable.Map 中更新多个值的惯用方法

datetime - Groovy - 惯用的编码方式最后一个工作日 - 月初

f# - 如何使这段代码更加紧凑和惯用?