使用try-with-resources语句关闭资源时,是否可以忽略抛出的异常?
例:
class MyResource implements AutoCloseable{
@Override
public void close() throws Exception {
throw new Exception("Could not close");
}
public void read() throws Exception{
}
}
//this method prints an exception "Could not close"
//I want to ignore it
public static void test(){
try(MyResource r = new MyResource()){
r.read();
} catch (Exception e) {
System.out.println("Exception: " + e.getMessage());
}
}
还是应该继续关闭finally
?
public static void test2(){
MyResource r = null;
try {
r.read();
}
finally{
if(r!=null){
try {
r.close();
} catch (Exception ignore) {
}
}
}
}
我在钱币开发邮件列表中找到了这个答案:http : //mail.openjdk.java.net/pipermail/coin-
dev/2009-April/001503.html
5. close方法的某些失败可以安全地忽略(例如,关闭已打开以供读取的文件)。 构造是否为此提供了条件?
不会。虽然此功能看起来很吸引人,但尚不清楚是否值得增加复杂性。实际上,这些“无害的异常”很少发生,因此,如果忽略这些异常,程序将不再健壮。如果您觉得必须忽略它们,则有一种解决方法,但这不是很漂亮:
static void copy(String src, String dest) throws IOException {
boolean done = false;
try (InputStream in = new FileInputStream(src)) {
try(OutputStream out = new FileOutputStream(dest)) {
byte[] buf = new byte[8192];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
}
done = true;
} catch(IOException e) {
if (!done)
throw e;
}
}
问题内容: 声纳给出了一个错误,应该将其关闭。我需要修改以下代码才能使用。我该怎么做呢? 问题答案: 当前,代码尚不准备处理异常-您丢失了finally块来关闭打开的流。而且,当然,您是对的-使用try-with-resources解决了这个问题:
本文向大家介绍Java使用 try-with-resources 实现自动关闭资源的方法,包括了Java使用 try-with-resources 实现自动关闭资源的方法的使用技巧和注意事项,需要的朋友参考一下 1、 在Java1.7之前,我们需要通过下面这种方法, 在finally中释放资源,这种方法有点繁琐。 2、在java1.7之后,可以使用try-with-resources实现自动关闭资
try-with-resources语句是一个try语句,其中包含一个或多个正式声明的资源。 这里资源是一个对象,一旦不再需要就应该关闭它。 try-with-resources语句确保在需求完成后关闭每个资源。 任何实现java.lang.AutoCloseable或java.io.Closeable的对象,接口都可以用作资源。 在Java 9之前,资源将在try之前或try语句内部声明,如下面
示例: 我没有任何对或的引用,它们也会被关闭吗? 谢啦
我正在Sonarqube上运行我的JDBC代码。我的代码有问题。 上面说3号线和9号线有阻塞问题。使用try-with-resources或在“finally”子句中关闭此“PreparedStatement”。我不明白这一点。我不知道如何解决这个问题
主要内容:Java SE 7:Try-With-Resources基础知识,Java SE 7:Try-With-Resources规则,Java SE 9:Try-With-Resources改进在这篇文章中,我们将讨论Java SE 9中的一些改进语句。现在让我们开始学习这个构造。 Java SE 7:Try-With-Resources基础知识 Java SE 7引入了一个新的构造: 语句,用于更好的异常处理。 如果没有这个构造,开发人员必须编写大量冗余和难看的代码。 如果开发人员忘记正确