新的/奇怪的Java“try()”语法?

时间:2012-04-11 23:14:04

标签: java syntax try-catch

在使用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();
        }
    }
}

8 个答案:

答案 0 :(得分:62)

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

/编辑

不妨把它放在这里。如果使用这样的包装类,可以使用try-with-resources语句来管理Lock

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

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

答案 1 :(得分:10)

答案 2 :(得分:6)

这些是JDK7中引入的更改。

第一个声明是尝试资源。我不知道它们存在的确切原因,但是输入流等常常会导致异常,我想它只是提高了可读性。编辑:感谢其他的回答者,我读了javadoc,现在我知道它会关闭所有实现AutoCloseable的i / o流,在很多情况下都不需要finally

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

答案 3 :(得分:2)

它被称为try-with-resource。这是一种方式,以便不必自己清理,因为语言会为你做。

答案 4 :(得分:1)

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

在java 7之前,我们使用finally块来关闭我们在程序中使用的资源。在finally块中,我们必须手动关闭我们在程序中使用的所有资源。 有关详细信息,请访问try with resources

答案 5 :(得分:1)

using(Resource)C Sharp的用法相同,这意味着当您的程序放弃此代码块时,此资源将自动回收。(仅限我的意见)

  

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

The try-with-resources Statement

答案 6 :(得分:0)

通过资源尝试来调用它。在尝试使用资源时,在try语句完成后,将在资源部分中声明的任何类型的可关闭流都将被关闭。 几乎就是

try{
InputStream is;
//Stuff
}finally{
is.close()
}

答案 7 :(得分:0)

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