我们在Java中没有像Java一样的Java中的析构函数.
Q1.我们应该如何清理java中的任何Object.
Q2.是否有替代finally块.
Q3.有时我们必须从我们的类中明确地调用初始化/终止第三方代码,例如
public classs MyClass{
public MyClass(){
ThirdPartyInitialize();
}
protected void finalize(){
ThirdPartyTerminate();
}
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
Sin*_*hot 16
您通常无法自己"清理"Java对象.垃圾收集器决定何时清理对象.您可以通过设置对象引用来指示何时完成对象引用null,但通常只是让它超出范围就足够了.无论哪种方式,您仍然无法控制何时收集垃圾.
该finally块用于执行操作,无论是否从try块中抛出异常,并且是执行清理的最佳位置.通常,您只会清理非开放流等非对象资源.
finalize()不保证被调用,因为在程序退出之前不保证会调用垃圾收集器.它不像C++析构函数,因为C++析构函数总是被调用,你可以依赖它们被调用.你不能依赖finalize()被召唤.
因此1)使用finally块来释放非对象资源2)让垃圾收集器清理对象资源3)你可以通过设置它来向垃圾收集器提示你完成了一个对象,null如果它在长时间使用的话跑步方法.
如果您的程序也关闭,您还可以为程序添加一个关闭钩子:
//add shutdown hook
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
ThirdPartyTerminate();
}
});
Run Code Online (Sandbox Code Playgroud)