我有一个对象。它打开了一个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/