本文主要是介绍thinking in java(III)--initialization and cleanup,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天看了第四章
Initialization and Clean up
构造函数是自然而又有效的一个设定
构造函数被调用前,对象的自动初始化动作不受程序员控制,但是调用后对象会处于你所希望的状态
关于构造函数的argument list
能够进行宽化转型,但是窄化转型需要明确的标识,具体参见书中冗长的例子。。。
记忆清除,这是和C++迥异的地方
三句话,大体描述了整个机制
1.垃圾回收不等于析构
2.对象可能不会被回收
3.垃圾回收只回收内存
垃圾回收的流程是这样子
在heap内存即将枯竭时,垃圾回收器自动启动
当确定该对象空间可被释放时,即该对象未被执行部分引用,首先调用该对象finalize(),然后回收该段内存
举个例子说,一个对象绘制了一个圆,满足清除该对象空间的条件时,开始垃圾回收流程
对象被释放了,但是圆依然存在,这可以视为一个BUG
实际上,需要自己编写一个方法来将这个圆抹去,完成除释放空间之外的所有善后工作
因此,finalize的功能略显尴尬,它判断对象是否达到了死亡条件,空间可否被释放
必要的话,你也可以加一些输出语句来观察内存回收情况
可以这么说,垃圾回收器干且只干回收垃圾这一码事,而不负责清理垃圾所造成的污染
而且要到内存有空了才主动出来收拾,
因此程序运行完后大有可能你的对象依然存在
毕竟调用一次垃圾回收动作开销还是很大的,一点点垃圾就让它暂时留着吧
这篇关于thinking in java(III)--initialization and cleanup的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!