新的/奇怪的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();
}
}
}
Ali asked 2020-01-27T06:46:43Z
8个解决方案
63 votes
它是在Java 7中添加的。它称为try-with-resources语句。
/编辑
最好也把它扔在这里。 如果使用以下包装器类,则可以使用try-with-resources语句来管理Locks:
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
但是,由于必须为每个资源声明一个变量,因此它的优点值得商de。
Jeffrey answered 2020-01-27T06:47:15Z
10 votes
这是Java 7新的try-with-resources语句:[http://download.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html]
Michael Schmeißer answered 2020-01-27T06:47:35Z
6 votes
这些是JDK7中引入的更改。
首先声明是一个try-with-resources。 我不知道它们为什么存在,但是异常通常是由输入流等引起的,我想这只会提高可读性。 编辑:感谢其他回答者,我阅读了javadoc,现在我知道它会关闭所有实现AutoCloseable的I / O流,在很多情况下都不需要finally块
第二个是多重捕获,当您以完全相同的方式处理不同的异常时,这非常方便。
MarioDS answered 2020-01-27T06:48:05Z
2 votes
称为尝试资源。 这是一种不必为自己打扫卫生的方法,因为该语言将为您做到。
kasavbere answered 2020-01-27T06:48:25Z
1 votes
它是在Java 7中添加的。称为资源尝试。 尝试使用资源语句功能是在Java 7版本中引入的。 尝试使用资源语句是一种声明一个或多个语句的try语句。 资源是程序完成后必须关闭的对象。
在Java 7之前,我们使用finally块关闭程序中已使用的资源。 在finally块中,我们必须手动关闭程序中已使用的所有资源。有关更多信息,您可以访问试试看资源
Aakash Garg answered 2020-01-27T06:48:50Z
1 votes
与C Sharp中的using(Resource)用法相同,这意味着当您的程序离开此代码块后,此资源将被自动回收。
try-with-resources语句可确保在语句末尾关闭每个资源。 任何实现java.lang.AutoCloseable的对象(包括所有实现java.io.Closeable的对象)都可以用作资源
资源尝试声明
Chopping answered 2020-01-27T06:49:19Z
0 votes
尝试使用资源进行调用。 在尝试使用资源时,在try语句完成后,将关闭在资源部分中声明的任何类型的可关闭流。 所以这几乎是一个
try{
InputStream is;
//Stuff
}finally{
is.close()
}
Shawn Shroyer answered 2020-01-27T06:49:39Z
0 votes
try-with-resources语句是一个try语句,用于声明一个或多个资源。 资源是程序完成后必须关闭的对象。 try-with-resources语句可确保在语句末尾关闭每个资源。 任何实现java.lang.AutoCloseable的对象(包括所有实现java.io.Closeable的对象)都可以用作资源。
Nada Touil answered 2020-01-27T06:50:00Z