Java清理步骤

Vor*_*t3x 4 java exit-code

在java中我记得当jvm退出或类被破坏时,你可以覆盖一些方法来调用,就像一些清理步骤一样?我似乎无法找到它在任何地方被称为什么.任何人都知道它叫什么,我只是找不到它?

kro*_*ock 9

您可以添加一个将在JVM终止时调用的关闭挂钩Runtime.addShutdownHook().

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        // ...
    }
});
Run Code Online (Sandbox Code Playgroud)

如果JVM异常退出,则无法保证关闭挂钩运行.

正如@Kaleb指出的那样,Object.finalize()当一个对象符合垃圾收集资格时,你可以重载.正如Josh Bloch在Effective Java Item 7中指出的那样:

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

紧随其后(由Josh强调):

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

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


Kal*_*see 5

最终化()时的对象被销毁方法被调用.