finalize()
的问题,发现没有人真正明确地指出finalize()是一种不可靠的清理资源的方式。我看到有人评论说他们使用它来清理连接,这真的很令人担忧,因为接近保证连接已关闭的唯一方法是实现try (catch) finally。我没有接受过计算机科学的教育,但我已经在Java职业编程近十年了,我从未见过有人在生产系统中实现过
finalize()
。这仍然不意味着它没有用途,也不意味着我与之合作的人一直做得正确。所以我的问题是,在哪些用例中需要实现
finalize()
,而其他语言内部的其他处理过程或语法无法更可靠地处理呢?请提供具体的场景或您的经验,简单重复Java教科书,或者finalize的预期使用是不够的,因为这不是这个问题的意图。
finalize()
方法。然而,处理调用者的本地资源的平台库代码(例如SocketInputStream
)会这样做,以尽量减少资源泄漏的风险(或使用后来添加的等效机制,如PhantomReference
)。因此,即使99.9999%的开发人员永远不会编写它们,生态系统仍然需要这些方法。 - Brian Goetzfinalize
已经被弃用。请参阅问题为什么Java 9中的finalize()方法已被弃用?。 - Basil Bourque