gpt4 book ai didi

java - 当GC可以释放所有连接时,为什么需要finalize

转载 作者:行者123 更新时间:2023-11-30 01:57:34 25 4
gpt4 key购买 nike

我有一个对象。它打开了一个FileConnection
现在,我引用了对象 null
然后 GC [Garbage-Collecter] 运行。
因此,GC 将释放该对象并关闭该对象所持有的FileConnection

那为什么我需要重写finalize方法?

最佳答案

finalize() 由 GC 在销毁对象之前调用。它根本不可能发生,并且 finalize() 方法永远不会被调用。

如果你获取了一个资源(即打开一个文件),你必须正确地手动释放它。您可以使用AutoCloseable接口(interface)。

示例:

try (Scanner scan = new Scanner(new File("xxx"))) {
// do smth.
} // scan.close() will be automatically called here

或更严格地说:

Scanner scan = null;

try {
scan = new Scanner(new File("xxx"));
} finally {
if (scan != null)
scan.close(); // instead of scan.finalize();
}

P.S. 切勿使用 finalize() 方法 - 该方法已过时并用于非常具体的低级解决方案。如果你问这个问题,那就意味着这不是你的问题。

关于java - 当GC可以释放所有连接时,为什么需要finalize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53881429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com