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

Java 尝试使用资源vs尝试捕获

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

Java 尝试使用资源vs尝试捕获

尝试使用资源的重点是确保可靠地关闭资源。

当你不使用try-with-resources时,存在一个潜在的陷阱,称为异常屏蔽。当try块中的代码引发异常,而finally中的close方法也引发异常时,try块引发的异常将丢失,而finally中引发的异常将被传播。这通常是不幸的,因为关闭时抛出的异常是无益的,而有用的异常是信息性的异常。(因此,没有看到告诉你违反了哪个参照完整性约束的SQLException,而是显示了类似BrokenPipeException的情况,其中关闭资源失败。)

这种异常掩盖是一个令人讨厌的问题,资源尝试可以防止这种情况发生。

作为确保异常屏蔽不会丢失重要的异常信息的一部分,当开发try-with-resources时,他们必须决定如何处理close方法抛出的异常。

使用try-with-resources时,如果try块引发异常,并且close方法也引发异常,则close块中的异常将附加到原始异常:

…在某些情况下,同级代码块中可能引发两个独立的异常,特别是在try-with-resources语句的try块和编译器生成的finally块中,这两个异常会关闭资源。在这些情况下,只能传播所引发的异常之一。在try-with-resources语句中,当有两个这样的异常时,将传播来自try块的异常,并将finally块的异常添加到由try块的异常抑制的异常列表中。作为异常展开堆栈,它可以累积多个抑制的异常。

另一方面,如果你的代码正常完成,但是你正在使用的资源在关闭时抛出异常,则抛出该异常(如果try块中的代码抛出任何内容,该异常将被抑制)。这意味着,如果你有一些JDBC代码,其中TrySet-with-resources关闭了ResultSet或PreparedStatement,则当JDBC对象关闭时,由于基础结构故障而导致的异常可能会抛出,并且可能回滚本来可以成功完成的操作。

没有try-with-resources,是否抛出close方法异常取决于应用程序代码。如果在try块引发异常时将其抛出到finally块中,则finally块中的异常将掩盖另一个异常。但是开发人员可以选择捕获关闭时抛出的异常,而不传播它。



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

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

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