Java jdk1.7中try块中的Autocloseable的新概念是什么

Java jdk1.7中try块中的Autocloseable的新概念是什么,java,autocloseable,Java,Autocloseable,jdk1.7中try块中的Autocloseable的新概念是什么。这真的是必需的,还是只是为了增强try-catch块中的某些内容以使其更高级。它支持使用try-with-resources,这是Java 7的一个新特性 老派: InputStream is = null; try { is = ...; // do stuff with is... } catch (IOException e) { // handle exception } finally {

jdk1.7中try块中的Autocloseable的新概念是什么。这真的是必需的,还是只是为了增强try-catch块中的某些内容以使其更高级。

它支持使用
try-with-resources
,这是Java 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
-块(在
()
中)中打开,并将自动关闭,而不是像上面的代码示例那样使用
finally

从:

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

因此,这意味着所有可自动关闭的对象都可以通过这种方式使用,这意味着,例如,
ResultSet
和其他资源可以通过资源试用方式使用。在我看来,这简化了编码和可读性

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


但是,尽管如此。使用try-with-resources是不需要的,尽管我不推荐使用它,但仍然可以按照传统的方式使用它(因为它既冗长又容易出错)。

它支持使用
try-with-resources
,这是Java 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
-块(在
()
中)中打开,并将自动关闭,而不是像上面的代码示例那样使用
finally

从:

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

因此,这意味着所有可自动关闭的对象都可以通过这种方式使用,这意味着,例如,
ResultSet
和其他资源可以通过资源试用方式使用。在我看来,这简化了编码和可读性

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


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

阅读Java 7中引入的特性文档

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

以及以下文件的Javadoc:

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

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
}

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

阅读Java 7中引入的功能的文档

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
}
try
-with resources语句是一个声明一个或多个资源的try语句。资源是一个必须在程序完成后关闭的对象。try with resources语句确保在语句末尾关闭每个资源实现
java.lang.AutoCloseable
的任何对象(包括实现
java.io.Closeable
的所有对象)都可以用作资源。

以及以下文件的Javadoc:

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

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
}
这意味着您可以创建自己的
AutoCloseable
资源子类型,并在此语句中使用它们

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中有许多实现自动关闭的类

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

java中有许多实现自动关闭的类

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


这解释了如何使用它,而不是为什么要使用它。好的,只是增加了可读性是一个有效的方法argument@jhamonOP并没有问为什么要用它。他问“这真的是必需的,…”同意@EJP,我认为这不是必需的,它只是通过节省两行代码来关闭连接或流,从而增加了复杂性。@Atul_15这是什么意思?使用try with资源自动关闭,例如<代码