在java中我记得当jvm退出或类被破坏时,你可以覆盖一些方法来调用,就像一些清理步骤一样?我似乎无法找到它在任何地方被称为什么。任何人都知道它叫什么,我只是找不到它?
答案 0 :(得分:9)
当JVM通过shutdown hook终止时,您可以添加Runtime.addShutdownHook()
。
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
// ...
}
});
如果JVM异常退出,则无法保证关闭挂钩运行。
正如@Kaleb指出的那样,您可以重载Object.finalize()
,当对象符合垃圾回收条件时,将调用该close
。正如Josh Bloch在Effective Java第7项中指出的那样:
接下来稍微降低了(Josh强调):终结器是不可预测的,通常是危险的,通常是不必要的
在对象无法访问的时间与执行终结器的时间之间可能需要任意长的时间...... 在终结器中永远不会做任何时间关键的事情。
如果您需要清理类中的资源,请在finally块中执行,或者实现finalize()
方法(或类似方法),而不是依赖{{1}}。
答案 1 :(得分:5)
当对象被销毁时调用finalize()方法。