1)The finalize method is invoked by JVM atmost once in its life cycle. ANS: Yes.
2)if finalize method is overridden,JVM will definitely invoke it. ANS: No, Its not necessary to override finalize() method in order to be called by GC.
3)Exceptions thrown by finalize() is ignored by JVM. ANS: Yes. This is from Sun API:
If an uncaught exception is thrown by the finalize method, the exception is ignored and finalization of that object terminates.
4)Calling System.gc will definitely call finalize(). ANS: No, Not necessary. If an obejct is still being referenced by some objects, JVM will not execute finalize().
5)the finalize method may throw checked exceptions ANS: Yes, the signature of finalize() says protected void finalize() throws Throwable. And since all exceptions and errors extend Throwable, finalize() can throw any kind of exception.