首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoCloseable并抛出异常

AutoCloseable并抛出异常
EN

Stack Overflow用户
提问于 2018-06-29 06:49:46
回答 3查看 1.8K关注 0票数 0

AutoCloseable有一个方法'void抛出异常‘。有些人建议扩展这个接口,覆盖close方法并删除异常。例如,请参见下面的链接。

但是当我忘记把这个语句放在一个“使用资源的尝试”语句中时,close方法是否比没有调用的方法更好呢?

  • 在使用资源的尝试中,关闭被称为
  • 在流api中,close被称为
  • 例如,如果离开创建资源的方法?

附加信息我在互联网上搜索过,并查看了文档。两人都建议删除抛出异常语句。但是我对这个建议的反应是,将来当我们项目中的某个人实现新的接口(毫无例外)时,忘了把他们放到资源测试中,我们就有了资源泄漏。对于我们的项目来说,这不是一个大问题,因为我们使用的是SonarQube,它将提到资源泄漏

示例位置:

EN

回答 3

Stack Overflow用户

发布于 2018-06-29 06:59:54

AutoCloseable有一个方法'void抛出异常‘。有些人建议扩展这个接口,覆盖close方法并删除异常。

您发布的链接并不意味着作为一般情况,它向您展示了为什么io包有自己的Closeable接口,只抛出一个IOException (因为它不需要抛出一个更通用的Exception)。这在运行时没有任何区别,它完全是正确的,所以如果任何东西试图在使用IOException接口时抛出不是io.Closeable的东西,就会抛出编译器错误。

但是当我忘记把这个语句放在一个“使用资源的尝试”语句中时,close方法是否比没有调用的方法更好呢?

在这里,您似乎是在暗示一个没有链接的链接--当它包装的资源关闭时,AutoCloseable抛出的异常类型实际上与此无关。

在使用资源的尝试中,关闭被称为

是的,这就是语言特征的全部要点。

在流api中,close被称为

除非您用资源块将其包装在一个“尝试”中。

例如,如果离开创建资源的方法?

不,如果你忘了关闭一个资源,它就会一直开着。

(此规则的唯一例外是,如果资源关闭在终结器中,则在垃圾收集之前执行。这当然不是什么值得依赖的东西,它只是(有时)被用作退路。

票数 1
EN

Stack Overflow用户

发布于 2018-06-29 06:57:43

当资源超出作用域时,试用资源会自动调用close (同时:您只能在“使用资源”中声明AutoClosable )。如果忘记将资源放在该语言结构中,则必须手动关闭它。

票数 0
EN

Stack Overflow用户

发布于 2018-06-29 06:59:02

AutoCloseable.close()方法不是析构函数(在Java中没有析构函数)--它是专门为try-with-resources创建的,因此如果没有在该语句中使用,也不会调用它--请参阅文档

AutoCloseable对象的close()方法在退出在资源规范标头中声明对象的试用资源块时自动调用。此构造确保迅速发布,避免资源耗尽异常和其他可能发生的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51095867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档