示例代码:
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 语句中抛出异常的情况(基本上只能在初始化期间发生)?是关闭资源时抛出的异常吗?