3. Well sort of, the JVM might not be able to call finalize method on your object if the JVM session ends before your object is garbage collected.
4. Yes you can, you can assign the this reference to a static variable to create a reference for your object in which case it will not be garbage collected. But when it does, the finalize method would not be called again...