这个还真没用过,小菜鸟路过。
这个不应该是一个答案,因为你说的对提问者没有任何帮助。
@水牛刀刀: 这个算是回答了第二个问题吧。
另在thinking in java里有关于finalize的描述,copy下给你
之所以要使用finalize(),看起来似乎是由于有时需要采取与Java的普通方法不同的一种方法,通过分配内存来做一些具有C风格的事情。这主要可以通过“固有方法”来进行,它是从Java里调用非Java方法的一种方式(固有方法的问题在附录A讨论)。C和C++是目前唯一获得固有方法支持的语言。但由于它们能调用通过其他语言编写的子程序,所以能够有效地调用任何东西。在非Java代码内部,也许能调用C的malloc()系列函数,用它分配存储空间。而且除非调用了free(),否则存储空间不会得到释放,从而造成内存“漏洞”的出现。当然,free()是一个C和C++函数,所以我们需要在finalize()内部的一个固有方法中调用它。
不多余,它在垃圾回收机制中有用处的,它是一个对象能否拒绝被垃圾回收的最后一道防线,只要在finalize函数中让该对象重新连接到GC Roots就不会被回收。它是由JVM触发的函数。