我一般认为清理资源是在finally块中完成的,
最近我在类中找到了这个特定的代码片段,它覆盖了Object类的finalize()方法.
protected void finalize() {
try {
In.close();
Out.close();
socket.close();
}
catch (Exception e) {
//logger code here
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个好主意吗?什么是利弊finalize()过finally?
Joh*_*don 16
该finally块只是一个代码块,总是在try块之后执行,即使存在异常.即它在本地范围内
该finalize()方法是一种在垃圾收集时清理整个对象的方法.
finally解决了代码块中清理资源的问题,无论是否出现异常情况......
finalize()一旦垃圾收集器确定没有更多的引用,这是一种在不再使用对象时清理资源的方法宾语.
简而言之,要回答你的问题,例如,如果你关闭的套接字是一个对象的成员,你应该在finalize()方法中关闭它们(虽然这是次优的,例如,因为GC不能保证将实际执行该操作)
但是,如果您在方法中打开套接字,并且在方法结束时使用它完成,则应释放finally块中的资源.
总是在最后清理东西.
无法保证最终完成清理.
然而,经常发现在终结器中清理这些东西作为最后一个安全阀,如果最终阻止另外一个例外.
依赖于终结器的真正问题是在GC调用终结器之前可能需要资源的其他东西.