Java 7 Try-With-Resources(AutoCloseable)实现
发布时间:2020-12-15 04:09:29 所属栏目:Java 来源:网络整理
导读:我的问题更多的是为什么类型而不是如何. 我知道在Java 7中有以下工作: try ( FileInputStream in = new FileInputStream(source); FileOutputStream out = new FileOutputStream(target); ) { ..................... } catch (......) { ............... }
我的问题更多的是为什么类型而不是如何.
我知道在Java 7中有以下工作: try ( FileInputStream in = new FileInputStream(source); FileOutputStream out = new FileOutputStream(target); ) { ..................... } catch (......) { ............... } 以下是语法错误: FileInputStream in; FileOutputStream out; try ( in = new FileInputStream(source); out = new FileOutputStream(target); ) { ..................... } catch (......) { ............... } 我很好奇为什么Closable / Autoclosable引用对try块是本地的如此重要?如果我们不拥有它而不是关闭它是危险的,这只是逻辑吗? 解决方法
我没有这个语言设计决策的参考,但我认为问题是允许非局部变量自动闭合将是危险的 – 也就是说,它将允许许多不安全的编码样式.从
the Java Language Specification开始:
如果资源不是最终的,那么在try块中可能会重新分配它们,从而导致资源泄漏.由于它们(隐式或显式)是最终的,因此编译器必须做很多额外的工作以确保在输入try资源规范时变量是definitely unassigned.它可能还需要更改final的编译器语义,因为在try块退出后变量确实不应该有一个有效值;当然不是try资源规范中赋给它们的值.最干净(也许唯一)要做的是在try块退出时使变量超出范围. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |