新/陌生的Java“try()”语法?

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

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

/编辑

不妨把它扔在这里。 如果你使用这样的包装类,你可以使用try-with-resources语句来pipe理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 

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

这是Java 7新的“试用资源”语句: http : //download.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html

这些是JDK7中引入的更改。

第一个陈述是一个尝试与资源。 我不知道它为什么存在,但exception往往是由inputstream等,我想这只是提高了可读性。 编辑:谢谢其他答案者,我读了javadoc,现在我知道它将closures实现AutoCloseable的所有I / Ostream,在很多情况下不需要finally

其次是一个多重捕获,当你有不同的例外时,这个方法非常方便。

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

这是与资源尝试调用。 在尝试使用资源时,在try语句完成之后,资源部分中声明的任何types的可closuresstream都将被closures。 所以它几乎是一个

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