【发布时间】:2018-01-08 10:55:13
【问题描述】:
这是给出错误的代码 -
try(StringWriter stringWriter = new StringWriter()) {
IDE 抱怨 来自自动关闭资源的未处理异常:java.io.IOException 这里有必要在构造函数中传递一些东西吗?
【问题讨论】:
-
错过了 catch 块?
这是给出错误的代码 -
try(StringWriter stringWriter = new StringWriter()) {
IDE 抱怨 来自自动关闭资源的未处理异常:java.io.IOException 这里有必要在构造函数中传递一些东西吗?
【问题讨论】:
添加catch块;
try(StringWriter stringWriter = new StringWriter()) {
//Do something
} catch(IOException e){
e.printStackTrace();
}
【讨论】:
正如抱怨的消息所暗示的那样:您有一个 来自自动关闭资源的未处理异常:java.io.IOException,因此您的代码没有完全编写。
你需要一个陷阱:
try (StringWriter stringWriter = new StringWriter()) {
//Do something
} catch (IOException e) {
//TODO
e.printStackTrace();
}
【讨论】:
因为close方法(在StringWriter中)被声明为:
public void close() throws IOException
你的 try-with-resources 会自动调用它。
【讨论】:
在 Java 中,检查的异常应该由可能抛出这些异常的函数声明(使用 throws 子句)或处理(使用 catch、finally 块)。您的代码也不执行此操作,这就是您收到编译器错误的原因。
顺便说一句,请参阅this link。
【讨论】: