在Try with resource中使用全局资源时,为什么不正确

时间:2017-05-23 07:15:07

标签: java java-7

我正在尝试使用资源,我发现如果我使用out语句,那么我就会出错#/ p>

纠正一个,

try (FileWriter fstream = new FileWriter(mergedFile, true);) {
 }

错误的

FileWriter fstream = null;
try (fstream = new FileWriter(mergedFile, true);) {
}

我想知道为什么我不能使用第二个?资源的范围是不同的?

2 个答案:

答案 0 :(得分:1)

是的,这是正确的,因为使用尝试使用资源声明的资源在块的末尾关闭,它在该块的范围之外不可用。

在块之后将资源保留在范围中是没有意义的,因为它已经关闭,你很可能无法使用它(某种“重置”,尽管如此)

您还可以在多个块中重复使用相同的变量名,因为它只存在于块的范围内。

所以你可以在第一次阻止之后跟随另一个try (FileWriter fstream = ...)

答案 1 :(得分:0)

有两个原因, 1.资源必须是最终的。在执行try-with-resources块期间,可以在任何时候更改外部声明的变量。这将破坏其清理并使其不一致。

  1. 资源范围必须与块关联。
  2. 以下是Java 7规范文档中的确切单词,

      

    ResourceSpecification使用声明一个或多个局部变量   初始化表达式充当try语句的资源。

         

    隐式声明在ResourceSpecification中声明的资源   最终(§4.12.4),如果它没有明确宣布为最终。

    同样来自规范的6.3

      

    在一个的ResourceSpecification中声明的变量的范围   try-with-resources语句(§14.20.3)来自声明   向右转过ResourceSpecification的剩余部分和   与try-with-resources语句关联的整个try块。