58

在使用 Eclipse 中的自定义格式选项时,在其中一个示例代码中,我看到了如下代码:

/**
 * 'try-with-resources'
 */
class Example {
    void foo() {
        try (FileReader reader1 = new FileReader("file1"); FileReader reader2 = new FileReader("file2")) {

        }
    }
}

我从来没有见过try这样的用法,而且我已经用 Java 编码 9 年了!有谁知道你为什么要这样做?这样做的可能用例/好处是什么?

我看到的另一段代码,我认为是一个非常有用的速记,所以我也在这里分享它,它的作用很明显:

/**
 * 'multi-catch'
 */
class Example {
    void foo() {
        try {
        } catch (IllegalArgumentException | NullPointerException | ClassCastException e) {
            e.printStackTrace();
        }
    }
}
4

8 回答 8

68

它是在 Java 7 中添加的。它被称为try-with-resources语句。

/编辑

还不如把这个也扔在这里。Lock如果你使用这样的包装类,你可以使用 try-with-resources 语句来管理s:

public class CloseableLock implements Closeable {
    private final Lock lock;

    private CloseableLock(Lock l) {
        lock = l;
    }

    public void close() {
        lock.unlock();
    }

    public static CloseableLock lock(Lock l) {
        l.lock();
        return new CloseableLock(l);
    }
}

try(CloseableLock l = CloseableLock.lock(lock)) { // acquire the lock
    // do something
} // release the lock

但是,由于您必须为每个资源声明一个变量,因此这样做的好处是值得商榷的。

于 2012-04-11T23:15:13.673 回答
10

这是 Java 7 的新 try-with-resources 声明:http: //download.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html

于 2012-04-11T23:16:24.970 回答
6

这些是 JDK7 中引入的更改。

第一个语句是 try-with-resources。我不知道它们存在的确切原因,但异常通常是由输入流等引起的,我想它只是提高了可读性。编辑:感谢其他回答者,我阅读了 javadoc,现在我知道它将关闭所有实现 AutoCloseable 的 i/o 流,finally在很多情况下都不需要块

第二个是多捕获,当您有不同的异常以完全相同的方式处理时,这非常方便。

于 2012-04-11T23:16:55.277 回答
2

它被称为资源尝试。这是一种不必自己清理的方法,因为语言会为你做这件事。

于 2012-04-11T23:17:59.033 回答
2

用法与using(Resource)中相同C Sharp,这意味着当您的程序离开此代码块时,此资源将自动回收。(只是我的看法)

try-with-resources 语句确保每个资源在语句结束时关闭。任何实现 java.lang.AutoCloseable 的对象,包括所有实现 java.io.Closeable 的对象,都可以用作资源

try-with-resources 声明

于 2018-06-13T11:50:00.047 回答
1

它是在 java 7 中添加的。它被称为 try with resources。在 java 7 版本中引入了 Try with resources 语句功能。Try with resource 语句是声明一个或多个语句的 try 语句。资源是程序完成后必须关闭的对象。

在 java 7 之前,我们使用 finally 块来关闭我们在程序中使用过的资源。在 finally 块中,我们必须手动关闭我们在程序中使用的所有资源。有关更多信息,您可以访问尝试资源

于 2017-12-11T05:06:25.133 回答
0

这被称为尝试资源。在使用资源的尝试中,在资源部分中声明的任何类型的可关闭流都将在尝试语句完成后关闭。所以它几乎是一个

try{
InputStream is;
//Stuff
}finally{
is.close()
}
于 2012-04-12T00:49:50.937 回答
0

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

于 2019-04-27T13:08:01.430 回答