【发布时间】:2018-11-01 03:05:43
【问题描述】:
示例代码:
class TestCharStream {
public static void main(String[] args){
// Assume specified file is not available in the location
try (Reader reader = new FileReader("C:\\TestData\\test123.txt")) {
System.out.println("Entered Try block");
int content;
while ((content = reader.read()) != -1) {
System.out.print((char) content);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
由于文件不可用,会抛出'FileNotFoundException',资源初始化失败。
根据 Java SE7 规范,我了解以下与“使用资源尝试”声明相关的要点
- 如果资源初始化失败(即其初始化表达式抛出异常),那么到目前为止由 try-with-resources 语句初始化的所有资源都将关闭。
- 只有在初始化为非空值时才关闭资源。
- 如果try块和try-with-resources语句都抛出异常,则该方法抛出try块抛出的异常; try-with-resources 语句抛出的异常被抑制。
我有关于关闭资源、抑制与上述要点相关的异常的问题
1) 上述示例代码案例(即资源初始化失败)是否不属于场景..无论try语句正常完成还是突然完成,资源都会关闭。是不是只适用于在try with resources语句中初始化成功且try块有错误的资源?
2) 如果在初始化资源时抛出异常(如示例),这将属于初始化不成功的情况。在这种情况下,我们怎么会遇到 try-with-resources 语句中抛出异常的情况(基本上只能在初始化期间发生)?是关闭资源时抛出的异常吗?
【问题讨论】: