我已经阅读了很多 Java 新手问题finalize()
令人困惑的是,没有人真正明确表示 Finalize() 是一种不可靠的清理资源的方法。我看到有人评论说他们用它来清理连接,这真的很可怕,因为接近保证连接关闭的唯一方法是最后实现 try (catch)。
我没有接受过 CS 教育,但我已经用 Java 专业编程近十年了,而且我从未见过有人实现过finalize()
在生产系统中。这仍然并不意味着它没有用处,也不意味着与我共事的人一直在做正确的事情。
所以我的问题是,有哪些用例可以实现finalize()
无法通过语言中的另一个过程或语法更可靠地处理?
请提供具体的场景或您的经验,简单地重复Java教科书,或最终确定的预期用途是不够的,因为不是这个问题的意图。
您可以将其用作持有外部资源(套接字、文件等)的对象的后盾。实施一个close()
需要调用的方法和文档。
实施finalize()
做close()
如果您发现尚未完成,则进行处理。也许有东西倾倒到stderr
指出您正在清理一个有问题的来电者。
它在特殊/有缺陷的情况下提供额外的安全性。并非每个来电者都会做正确的事情try {} finally {}
每次都有东西。不幸的是,但在大多数环境下都是如此。
我同意很少需要它。正如评论者所指出的,它会带来 GC 开销。仅当您在长时间运行的应用程序中需要“腰带和吊带”安全时才使用。
我看到从 Java 9 开始,Object.finalize() https://docs.oracle.com/javase/9/docs/api/java/lang/Object.html#finalize--已弃用!他们向我们指出java.lang.ref.Cleaner https://docs.oracle.com/javase/9/docs/api/java/lang/ref/Cleaner.html and java.lang.ref.PhantomReference https://docs.oracle.com/javase/9/docs/api/java/lang/ref/PhantomReference.html作为替代方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)