4

在java中,我记得有一些方法可以在jvm退出或类被销毁时调用,就像一些清理步骤一样?我似乎在任何地方都找不到它叫什么。有人知道它叫什么,我就是找不到它吗?

4

2 回答 2

10

您可以添加一个关闭钩子,当 JVM 通过 终止时将调用该钩子Runtime.addShutdownHook()

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        // ...
    }
});

但是,如果 JVM 异常退出,则不保证会运行关闭挂钩。

正如@Kaleb 指出的那样,您可以重载Object.finalize()将在对象符合垃圾收集条件时调用。正如 Josh Bloch 在Effective Java Item 7中指出的那样:

终结器是不可预测的,通常是危险的并且通常是不必要的

紧随其后的是(乔希强调):

从对象变得无法访问到执行其终结器的时间之间可能需要任意长的时间……永远不要在终结器中做任何时间关键的事情。

如果您需要清理类中的资源,请在 finally 块中执行或实现close方法(或类似方法),而不是依赖finalize().

于 2011-03-20T13:36:24.660 回答
5

finalize()方法在对象被销毁时调用。

于 2011-03-20T13:31:00.447 回答