我正在尝试使用资源,我发现如果我使用out语句,那么我就会出错#/ p>
纠正一个,
try (FileWriter fstream = new FileWriter(mergedFile, true);) {
}
错误的
FileWriter fstream = null;
try (fstream = new FileWriter(mergedFile, true);) {
}
我想知道为什么我不能使用第二个?资源的范围是不同的?
答案 0 :(得分:1)
是的,这是正确的,因为使用尝试使用资源声明的资源在块的末尾关闭,它在该块的范围之外不可用。
在块之后将资源保留在范围中是没有意义的,因为它已经关闭,你很可能无法使用它(某种“重置”,尽管如此)
您还可以在多个块中重复使用相同的变量名,因为它只存在于块的范围内。
所以你可以在第一次阻止之后跟随另一个try (FileWriter fstream = ...)
。
答案 1 :(得分:0)
有两个原因, 1.资源必须是最终的。在执行try-with-resources块期间,可以在任何时候更改外部声明的变量。这将破坏其清理并使其不一致。
以下是Java 7规范文档中的确切单词,
ResourceSpecification使用声明一个或多个局部变量 初始化表达式充当try语句的资源。
隐式声明在ResourceSpecification中声明的资源 最终(§4.12.4),如果它没有明确宣布为最终。
同样来自规范的6.3
在一个的ResourceSpecification中声明的变量的范围 try-with-resources语句(§14.20.3)来自声明 向右转过ResourceSpecification的剩余部分和 与try-with-resources语句关联的整个try块。