我读到了JDK7中的试用资源,当我考虑升级应用程序以使用JDK7运行时,我遇到了这个问题。
作为示例,我创建了一个自动关闭资源:
public class AutoCloseableExample implements AutoCloseable {
public AutoCloseableExample() throws IOException{
throw new IOException();
}
@Override
public void close() throws IOException {
throw new IOException("An Exception During Close");
}
}
现在使用时:
public class AutoCloseTest {
public static void main(String[] args) throws Exception {
try (AutoCloseableExample example = new AutoCloseableExample()) {
System.out.println(example);
throw new IOException("An Exception During Read");
} catch (Exception x) {
System.out.println(x.getMessage());
}
}
}
我如何区分这样的异常,而不必为类(如BufferedReader)创建包装器?
让我们考虑以下类:
public class Resource implements AutoCloseable {
public Resource() throws Exception {
throw new Exception("Exception from constructor");
}
public void doSomething() throws Exception {
throw new Exception("Exception from method");
}
@Override
public void close() throws Exception {
throw new Exception("Exception from closeable");
}
}
和试用资源块:
try(Resource r = new Resource()) {
r.doSomething();
} catch (Exception ex) {
ex.printStackTrace();
}
1.所有3个抛出语句都已启用。
重要提示:在上述所有情况下,您实际上都捕获了所有异常,无论它们被抛到哪里。因此,如果您使用try-with-resource块,您就不需要用另一个try-catch来包装该块,那么额外的块就是毫无用处的。
希望有帮助:)
为什么尽管我使用了,Eclipse仍然会对以下代码发出奇怪的“resource leak:zin从不关闭”警告: 如果我修改了代码上的“任何内容”,警告就会消失。下面我列出了3个修改版本,它们都可以(没有警告)。 Mod#1:如果我从块中删除循环,则警告将消失: Mod#2:如果保留循环但删除包装,也没有警告: Mod#3:如果我在之外创建了,也没有警告: 我使用了Eclipse Kepler(4
本文向大家介绍什么是Java中的try-with-resource?,包括了什么是Java中的try-with-resource?的使用技巧和注意事项,需要的朋友参考一下 每当我们实例化并使用某些对象/资源时,都应显式关闭它们,否则有可能发生资源泄漏。 从JSE7开始,引入了try-with-resources语句。在这种情况下,我们在try块中声明一个或多个资源,这些资源在使用后将自动关闭。(在
假设我使用的是一个文档不完整的第三方库,它没有源代码。库的方法之一接受来加载各种数据。 不幸的是,Java规范(据我所知)没有提到如果在try-with-resource中手动关闭资源会发生什么。有没有人碰巧知道?
本文向大家介绍Java try-with-resource语法使用解析,包括了Java try-with-resource语法使用解析的使用技巧和注意事项,需要的朋友参考一下 背景 众所周知,所有被打开的系统资源,比如流、文件或者Socket连接等,都需要被开发者手动关闭,否则随着程序的不断运行,资源泄露将会累积成重大的生产事故。 在Java的江湖中,存在着一种名为finally的功夫,它可以保证
问题内容: Java7的try-with-resources非常好,但是我无法绕开为什么需要在语句中包括资源声明的问题。我的直觉说以下应该是可能的: las,这会导致语法错误(含糊地期待a )。将类型定义/声明移动到语句中是可行的,这当然会将事物移动到相应的范围内。当我想从封闭中获得更多收益时,我可以弄清楚该如何解决,我对 为什么 编译器需要这样的东西很感兴趣。 问题答案: 您的版本未明确定义应关