栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

尝试使用资源的详细信息

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

尝试使用资源的详细信息

每当需要与语言相关的细节时,最完整的参考就是Java语言规范(仅适用于Google)。对于

try
-with-
resources语句,您可以阅读14.20.3节,其中指出以下内容:

try ({VariableModifier} R Identifier = expression ...)    Block

被翻译成

{   final {VariableModifierNoFinal} R Identifier = expression;    Throwable #primaryExc = null;   try ResourceSpecification_tail      Block catch (Throwable #t) {         #primaryExc = #t;         throw #t;      } finally {         if (Identifier != null) { if (#primaryExc != null) {     try {        Identifier.close();     } catch (Throwable #suppressedExc) {        #primaryExc.addSuppressed(#suppressedExc);    } } else {    Identifier.close(); }         }     }}

在第一个示例中,资源

R
BufferedReader
Identifier
is
br
expression
is为
newBufferedReader(newFileReader(filePath))
。因此,仅
BufferedReader
在隐式
finally
块中关闭了。该
finally
块不会调用
close
FileReader
因为它
不是 资源声明本身的一部分。 但是
,碰巧
BufferedReader.close()
内部实现会调用
close
包装的方法
FileReader
。因此,第一个问题的答案是肯定的,因为包装对象将其关闭(遵循通常的观点,即资源在被释放时应该释放任何包装的资源),
而不是 因为
try
-with-resources。

在第二个示例中:

private static BufferedReader buf1;public static void main(String[] args) throws IOException {    //some pre    try (BufferedReader buf2 = buf1)    {    } }

答案取决于

somepre
。在这里
buf2
buf1
两者都指向内存中的同一对象。如果此“某些代码”初始化
buf1
为某个对象,则该对象将被关闭,因为
buf2
它也引用了它。如果不是,并且
buf1
为null(因此
buf2
为null),则不会关闭任何内容,因为
finally
上面显示的隐式中存在null检查。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428483.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号