根据官方Java文档,Object.finalize()会被垃圾收集器调用,当垃圾收集器认定这个对象没有被引用时。 直接调用这个方法会破坏这个协议,所以会产生误导。

下面代码演示了这个规则:

public void dispose() throws Throwable {
  this.finalize();                       // Non-Compliant
}