99.99% of the time, you don't want to call finalize()
manually, as it will be implicitly called by the JVM when all references to the object are closed, and as such the best way to remove the object is to manually null
all the references to it you have, and let the Garbage Collector work on its own.
When the call is made implicitly, there are no longer any references to the object and thus the exception has nothing to catch it, whereas in the explicit call, the reference to the object will exist until after the call has finished.