The contract of the Object.finalize() method is clear: only the Garbage Collector is supposed to call this method. Making this method public is misleading, because it implies that any caller can use it.

The following code snippet illustrates this rule:

public class MyClass {

  @Override
  public void finalize() {    // Non-Compliant
    /* ... */
  }
}