ARM在JAVA 7中(尝试使用资源),在将值重新赋值给AutoCloseable类型的任何变量时出错

时间:2013-12-01 19:53:51

标签: java-7

我正在使用资源块进行新的尝试,该块会自动调用AutoCloseable的close()方法

我想知道为什么编译器不允许我在声明之后为varable重新赋值。

检查出来: -

try (FileInputStream fs = new FileInputStream("c:\\code\\audit.txt");ObjectInputStream is= new ObjectInputStream(fs);fs = new FileInputStream("c:\\code\\log.txt")) {

编译错误: -

 VariableDeclaratorId expected after this token
    fs cannot be resolved to a type

2 个答案:

答案 0 :(得分:2)

正如API

中所述
  

try-with-resources语句是一个try语句,声明一个或多个资源。资源是在程序完成后必须关闭的对象。 try-with-resources语句确保在语句结束时关闭每个资源。

它清楚地说,它只声明变量,而不是分配。 所以这给出了编译错误。 Here是使用完整链接,解释了这一点。

此外,然后它说,

  

请注意,资源的close方法按其创建的相反顺序调用。

所以很明显,所以它无法关闭已经关闭的资源。

答案 1 :(得分:-1)

如果资源引用变量开始重新分配,那么以前指向资源的资源将被打开并且将是腰部,因此只有新的指向资源将被关闭,由于这个原因编译器引发编译时间错误。 "可能无法分配自动关闭资源xxx" 。基于java 1.7