OK Let me confirm my understanding with finalize() method.
1. finalize() method will be called by Garbage collector before Garbage Collecting.
2. Normally it should be overridden to clean-up non-Java resources used in a
Java Code.
3. finalize() is never run more than once on any object.
4. Since we can't rely on Garbage Collection in Java, we can't assure that finalize() method will always be invoked. Hence we should not have any important business logic inside finalize() method.