根据这个简单的测试程序,即使您显式调用了JVM,JVM仍将对finalize()进行调用:
private static class Blah{ public void finalize() { System.out.println("finalizing!"); }}private static void f() throws Throwable{ Blah blah = new Blah(); blah.finalize();}public static void main(String[] args) throws Throwable{ System.out.println("start"); f(); System.gc(); System.out.println("done");}输出为:
开始
定案!
定案!
完成
那里的每个资源都说永远不要显式地调用finalize(),甚至几乎永远都不会实现该方法,因为无法保证何时以及何时调用它。最好只手动关闭所有资源。



