Java为什么要实现finalize()?
我已经阅读了许多关于Java的新手问题finalize()
,发现令人困惑的是,没有人真的说过finalize()
是清理资源的不可靠方法。我看到有人评论说他们用它来清理Connections
,这确实很吓人,因为要保证Connection
关闭的唯一方法就是最终实现try(catch)
。
我没有在CS上学,但是近十年来我一直在用Java专业编程,而且从未见过有人finalize()
在生产系统中实现过。这仍然并不意味着它没有用途,或者与我一起工作的人都在正确地做它。
所以我的问题是,存在哪些用例finalize()
无法通过语言中的其他过程或语法更可靠地处理?
请提供特定的方案或你的经验,仅仅重复一本Java教科书,或完成最终的预期用途是不够的,这不是此问题的意图。
回答:
你可以将其用作保存外部资源(套接字,文件等)的对象的支持。实现close()
需要调用的方法和文档。
如果发现尚未完成finalize()
,请实施close()
处理。也许有一些东西要转而stderr指出你是在有错误的呼叫者之后进行清理。
在特殊/越野情况下,它可提供额外的安全性。并非每个呼叫者每次都会做正确的try {} finally {}
事情。不幸的是,但在大多数环境中都是如此。
我同意很少需要它。正如评论者所指出的,它带有GC开销。仅在长期运行的应用程序中需要“皮带和吊带”安全性时使用。
从Java 9开始,我Object.finalize()
已经过时了!他们指出,我们java.lang.ref.Cleaner
并java.lang.ref.PhantomReference
作为替代品。
以上是 Java为什么要实现finalize()? 的全部内容, 来源链接: utcz.com/qa/429896.html