finalize方法是Object类的一个Protected方法。每个对象都有自己的finalize方法,通过super.finalize()方法来调用。如果你写了两个类,类名分别为A和B,在B类中你想调用A类的finalize()方法,A类必须重写Object对象的finalize方法。

[color=green][b]java-(public,private,protected)访问修饰符的 作用域(访问范围)[/b][/color]
[img]http://dl.iteye.com/upload/attachment/453334/c6e59305-247e-33a6-8d77-99ca7b383a25.jpg

问题:finalize()在什么时候被调用
有三种情况
1.所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候
2.程序退出时为每个对象调用一次finalize方法
3.显式的调用finalize方法

注意:调用System.gc(),只是建议虚拟机进行垃圾回收,但垃圾回收并不一定立即启动。

除此以外,正常情况下,当某个对象被系统收集为无用信息的时候,finalize()将被自动调用,但是jvm不保证finalize()一定被调用,也就是说,finalize()的调用是不确定的,这也就是为什么sun不提倡使用finalize()的原因。你的程序应该提供其他的方法来释放由对象使用的系统资源,而不能依靠finalize()来完成程序的正常操作。