0

jdk 1.7的try block中Autocloseable的新概念是什么。这是真的需要还是只是为了增强 try catch 块中的某些内容以使其更先进。

4

3 回答 3

3

它支持使用try-with-resourcesJava 7 中的一个新特性。

老套:

InputStream is = null;
try {
    is = ...;
    // do stuff with is...
} catch (IOException e) {
    // handle exception
} finally {
    if (is != null) {
        try {
            is.close();
        } catch (IOException innerE) {
            // Handle exception
        }
    }
}

新学校:

try (InputStream is = ...) {
    // do stuff with is...
} catch (IOException e) {
    // handle exception
}

AutoCloseable对象可以在try-block(在 内())中打开,并且将自动关闭finally,而不是像上面的代码示例中那样使用块。

来自Oracle 文档

try-with-resources 语句是声明一个或多个资源的 try 语句。资源是程序完成后必须关闭的对象。try-with-resources 语句确保每个资源在语句结束时关闭。任何实现 java.lang.AutoCloseable 的对象,包括所有实现 java.io.Closeable 的对象,都可以用作资源。

因此,这意味着所有AutoCloseable可以以这种方式使用的对象,这意味着ResultSet可以以 try-with-resources 方式使用 eg 和其他资源。IMO,这简化了编码和可读性

然而,可读性并不是为什么要使用方法的杀手锏。我相信资源是自动关闭的,这是一个简单的事实。在 Java 7 之前使用时,可能会忘记执行 null 检查或关闭底层资源 - try-with-resources 更不容易出错。

但是,话虽如此。不需要使用 try-with-resources,即使我不推荐它(因为它既冗长又容易出错),仍然可以使用老式的方式。

于 2015-01-08T08:22:17.903 回答
1

阅读Java 7 中引入的try-with-resources特性的文档。

try-with-resources 语句是声明一个或多个资源的 try 语句。资源是程序完成后必须关闭的对象。try-with-resources 语句确保每个资源在语句结束时关闭。任何实现的对象,java.lang.AutoCloseable包括所有实现的对象java.io.Closeable,都可以用作资源。

和Javadoc AutoCloseable#close()

关闭此资源,放弃任何基础资源。此方法在由try-with-resources 语句管理的对象上自动调用。

这意味着您可以创建自己的AutoCloseable资源子类型并在此语句中使用它们。

于 2015-01-08T08:22:54.540 回答
0
try (BufferedReader br = new BufferedReader(new InputStreamReader)) {
    // try block
} catch (IOException e) {
    // No need to close resourse. Only handle exception. Resource will be closed automatically
}

java中有许多实现Autoclosable的类。

下面的链接显示了实现此接口的类列表。

http://docs.oracle.com/javase/7/docs/api/java/lang/Au​​toCloseable.html

于 2015-01-08T10:00:27.340 回答