gpt4 book ai didi

java - 清理 finalize() 或 finally() 中的代码?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:03:16 26 4
gpt4 key购买 nike

我一般认为资源清理是在 finally block 中完成的,
最近我在一个类中发现了这个特定的代码片段,它覆盖了 Object 类'finalize()方法。

protected void finalize() {  
try {
In.close();
Out.close();
socket.close();
}
catch (Exception e) {
//logger code here
}
}

这是个好主意吗? finalize() 相对于 finally 的优缺点是什么?

最佳答案

finally block 只是一个始终在 try block 之后执行的代码块,即使出现异常也是如此。即它在范围内是本地的

finalize() 方法是一种在垃圾回收时清理整个对象的方法。

Java documentation of finalize()

finally 解决了无论是否出现异常情况,都在一段代码中清理资源的问题...finalize() 是一种在不再使用您的对象时清理资源的方法,一旦垃圾收集器确定不再有对该对象的引用。

简而言之,要回答您的问题,例如,如果您要关闭的套接字是对象的成员,您应该在 finalize() 方法中关闭它们,(尽管这是次优的,举个例子,因为无法保证 GC 何时实际执行该操作)

但是,如果您在一个方法中打开套接字,并且在该方法结束时完成了它,您应该释放 finally block 中的资源。

关于java - 清理 finalize() 或 finally() 中的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1843905/

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