Hi,
As per messages in the
thread, we know that finalize would be called just once on the object before the object is garbage collected.This is handled by JVM.
However, this doesnot prevent you from calling the finalize() method the way you did in the code snipplet you posted - t.finalize().This would produce the first output on your screen.
After that you are marking the object for Garbage Collection, by setting t = null, and then smartly (or should I say unsmartly, as it is not a smart idea to call Garbage collector..leave something for the JVM to do!

) and explicitly calling Runtime.gc().At this moment, you are just telling the JVM to garbage collect the object.
The JVM may oblige you by GC the object or may not; however, the finalize routine would certianly get executed JUST before the object is GCed.This is the reason you see the second statement outputed on your screen from the finalize() method.
Hope this helps,
Sandeep
SCJP2, OCSD(Oracle JDeveloper), OCED(Oracle Internet Platform) [This message has been edited by Desai Sandeep (edited July 26, 2001).]