展望2011
2007-01-04 | java中finalize的使用(1)[转]
上一篇 /
下一篇 2007-04-27 17:55:12
/ 个人分类:编程基础
%D#b~@+[H$}F/N8w0《JAVA编程思想》:51Testing软件测试网R'R!QH:PBPJz
4Kx:J$?6UO0java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。
*b;sG0y+T a4u]051Testing软件测试网/P r[Nf R R%Y (1).对象不一定会被回收。51Testing软件测试网\5c/a,dQ/`!G
zz
51Testing软件测试网_.\-AHL pF`6j (2).垃圾回收不是析构函数。
{Wxh]w051Testing软件测试网*|-f2t$]{mF E (3).垃圾回收只与内存有关。
Z!Czr.Y1@/xg's051Testing软件测试网`/zrlz&@d
I (4).垃圾回收和finalize()都是靠不住的,只要JVM还没有快到耗尽内存的地步,它是不会浪费时间进行垃圾回收的。51Testing软件测试网_hg|8@dI^$cT&s2mJ
~)K `!F6g8},g:E0有时当撤消一个对象时,需要完成一些操作。例如,如果一个对象正在处理的是非Java 资源,如文件句柄或window 字符字体,这时你要确认在一个对象被撤消以前要保证这些资源被释放。为处理这样的状况,Java 提供了被称为收尾(finalization )的机制。使用该机制你可以定义一些特殊的操作,这些操作在一个对象将要被垃圾回收程序释放时执行。51Testing软件测试网"D3x4Y4w,w
51Testing软件测试网e@.|e3N6RL0lI要给一个类增加收尾(finalizer ),你只要定义finalize ( ) 方法即可。Java 回收该类的一个对象时,就会调用这个方法。在finalize ( )方法中,你要指定在一个对象被撤消前必须执行的操作。垃圾回收周期性地运行,检查对象不再被运行状态引用或间接地通过其他对象引用。就在对象被释放之前,Java 运行系统调用该对象的finalize( ) 方法。
2G1R pK(PyY5B051Testing软件测试网$yyw(d3y"b#MtF!lfinalize()方法的通用格式如下:51Testing软件测试网:a,Y(X8AV"ak0C!V
'u[Zy5[Y*WQ(C0protected void finalize( )
E/J'n!u cm0{
XE!M ~;B0// finalization code here
O+P?_`&R
{;D$z ^
V0}
+n5Ij/{-BjIc4`051Testing软件测试网.|#[$A4MPy/d
51Testing软件测试网+|,Fq$Sf~其中,关键字protected是防止在该类之外定义的代码访问finalize()标识符。该标识符和其他标识符将在第7章中解释。