try(FileReader rd = new FileReader("Test.txt");){}
catch (Exception e) {e.printStackTrace();}
这就是我的研究过程开始的地方。
在做了一些调试之后,我发现FileReader扩展了InputStreamReader。在FileReader类中,此构造函数调用
public FileReader(File file) throws FileNotFoundException {
super(new FileInputStream(file));
}
它创建FileInputStream类的对象。FileInputStream扩展了InputStream,后者实现了可关闭的接口。
public void close() throws IOException {
synchronized (closeLock) {
if (closed) {
return;
}
closed = true;
}
if (channel != null) {
channel.close();
}
fd.closeAll(new Closeable() {
public void close() throws IOException {
close0();
}
});
}
public class MyClass implements Closeable
{
public void close()
{
System.out.println("connection closed...");
}
}
try(MyClass rd = new MyClass();)
{}
catch (Exception e)
{e.printStackTrace();}
public void close() throws IOException {
synchronized (closeLock) {
if (closed) {
return;
}
closed = true;
}
if (channel != null) {
channel.close();
}
fd.closeAll(new Closeable() {
public void close() throws IOException {
close0();
}
});
}
提前谢了。
在回答实际问题之前,了解资源尝试是如何工作的是很重要的。为此,我们可以参考Java语言规范(JLS)的§14.20.3。从本质上讲,这一章告诉您的是,如果您有以下代码:
try (AutoCloseable closeable = ...) {
// try something
}
注意:try-with-resources语句适用于任何java.lang.autocloseable
实现。java.io.closeable
接口扩展了java.lang.autocloseable
接口。
然后由编译器翻译,就像您写了类似的内容:
AutoCloseable closeable = ...;
Throwable primary = null;
try {
// try something
} catch (Throwable t) {
primary = t;
throw t;
} finally {
if (closeable != null) {
if (primary != null) {
try {
closeable.close();
catch (Throwable suppressed) {
primary.addSuppressed(suppressed);
}
} else {
closeable.close();
}
}
}
try (AutoCloseable closeable = ...) {
// try something
} catch (Exception ex) {
// handle error
} finally {
// finally...
}
try {
// "basic" translation
} catch (Exception ex) {
// handle error
} finally {
// finally...
}
import java.io.Closeable;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try (MyClass foo = new MyClass()) {
// try something...
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static class MyClass implements Closeable {
@Override
public void close() throws IOException {
System.out.println("MyClass#close()");
}
}
}
import java.io.Closeable;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
MyClass foo = new MyClass();
Throwable primary = null;
try {
try {
// try something...
} catch (Throwable t) {
primary = t;
throw t;
} finally {
if (foo != null) {
if (primary != null) {
try {
foo.close();
} catch (Throwable suppressed) {
primary.addSuppressed(suppressed);
}
} else {
foo.close();
}
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static class MyClass implements Closeable {
@Override
public void close() throws IOException {
System.out.println("MyClass#close()");
}
}
}
本文向大家介绍Java使用 try-with-resources 实现自动关闭资源的方法,包括了Java使用 try-with-resources 实现自动关闭资源的方法的使用技巧和注意事项,需要的朋友参考一下 1、 在Java1.7之前,我们需要通过下面这种方法, 在finally中释放资源,这种方法有点繁琐。 2、在java1.7之后,可以使用try-with-resources实现自动关闭资
示例: 我没有任何对或的引用,它们也会被关闭吗? 谢啦
我在块中创建了数量可变的对象。在任何退出点,我都希望关闭所有分配的资源。 我可以想象自己写一些东西来做这件事,但是有没有类似于Python的Contextlib的现有实用程序。将关闭分配的资源的ExitStack?我希望它看起来像这样: (注意:这不是这个问题,因为我不知道我会提前准备多少资源。)。 嘿,close投票者我不是在要求一个库,我是在问你如何安全地关闭动态数量的s,如果有语言功能,很好
问题内容: 声纳给出了一个错误,应该将其关闭。我需要修改以下代码才能使用。我该怎么做呢? 问题答案: 当前,代码尚不准备处理异常-您丢失了finally块来关闭打开的流。而且,当然,您是对的-使用try-with-resources解决了这个问题:
我在Java应用程序中使用Spring,所有@Autowired注释到目前为止都在工作。 一旦我尝试启动应用程序,我得到: 该接口仅包含两个公共简单方法,该类实现了它们 这两个类都是公共的,并且都有公共的默认构造函数。(我甚至尝试在测试中实例化它们。 删除部分后,一切正常 接口的实现会有什么问题?什么是< code>$ProxyXX?
我正在尝试使用new关键字创建一个组件的新实例。组件类有另一个类的自动布线。在第一类中,它有一个调用第二类的方法。代码如下: First.java 第二Java语言 一个pplication.java 我能够使用依赖注入来训练解决方案。我只是想这样做。 提亚