我一直在阅读许多关于Java的新手问题finalize()
,发现令人困惑的是,没有人真的说过finalize()是清理资源的不可靠方法。我看到有人评论说他们用它来清理Connections,这确实很吓人,因为要保证关闭Connection的唯一方法就是最终实现try(catch)。
我没有在CS上学,但是近十年来我一直在用Java专业编程,而且从未见过有人finalize()
在生产系统中实现过程序。这仍然并不意味着它没有用途,或者与我一起工作的人都在正确地做它。
所以我的问题是,有哪些用例可以实现 finalize()
无法通过语言中的其他过程或语法更可靠地处理?
请提供特定的方案或您的经验,仅仅重复一本Java教科书,或完成最终的预期用途是不够的,这不是此问题的意图。
finalize()
。但是,平台库代码(例如SocketInputStream
,代表呼叫者管理本地资源)这样做是为了最大程度地降低资源泄漏的风险(或使用PhantomReference
稍后添加的等效机制,例如)。因此,生态系统需要它们,即使99.9999%的开发人员永远不会编写一个。