我正在使用资源块进行新的尝试,该块会自动调用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
答案 0 :(得分:2)
正如API
中所述try-with-resources语句是一个try语句,声明一个或多个资源。资源是在程序完成后必须关闭的对象。 try-with-resources语句确保在语句结束时关闭每个资源。
它清楚地说,它只声明变量,而不是分配。 所以这给出了编译错误。 Here是使用完整链接,解释了这一点。
此外,然后它说,
请注意,资源的close方法按其创建的相反顺序调用。
所以很明显,所以它无法关闭已经关闭的资源。
答案 1 :(得分:-1)
如果资源引用变量开始重新分配,那么以前指向资源的资源将被打开并且将是腰部,因此只有新的指向资源将被关闭,由于这个原因编译器引发编译时间错误。 "可能无法分配自动关闭资源xxx" 。基于java 1.7