初始化与清理
本节介绍了构造器和垃圾回收器
构造器
1.构造器名称与类名相同,Java存在默认构造器(即无参构造器),无返回值但也不同于声明void的方法。Java会帮你创建默认构造器,但当你创建了有参构造器时,无参构造器就需要声明。
2.方法名相同,但参数列表不同即为重载。非私有方法(非private方法)才能重载。
3.this的存在是因为编译器会将a.peel(1)代码变为类名.peel(a,1),“偷偷”传入了对象的引用,所以没有标识符可用,就使用this。当数据成员与参数名称一致时,this还可代指数据成员。(static就是没有this的方法,内部不用调用非静态方法)
垃圾回收器
1.Java允许有finalize()方法,但这与c++的析构函数不一样。换句话说,Java对象可能不被垃圾回收、垃圾回收不等于析构、垃圾回收只与内存有关。声明finalize()方法的需求限制到一种特殊情况,即通过某种创建对象方式以外的方式为对象分配了存储空间。(Java可能会调用其他语言代码,若调用了c或c++本地方法,malloc()函数系列分配空间就是这种特殊情况)
2.垃圾回收器一面回收空间,一面使对象紧凑排列,实现了一种高速的、有无限空间可供分配的堆模型。垃圾回收器技术的实现基于计数技术,追溯引用链条,检查访问对象是否都“活”。垃圾回收器有“停止-复制”、“标记-清扫”(会产生内存碎片)两种模式,代数来标记块是否存活。
3.Java存在JIT(just-in-time)即时技术和惰性评估(必要时才编译,不执行不编译)。HotSpot就利用这种思想,每次执行都优化,越执行越快。
初始化
1.初始化顺序:先静态对象,后非静态对象。要执行main()(静态方法)必须加载StaticInitialization类,静态域被初始化。静态初始化仅进行一次。
2.基本数据类型数组初始化有默认值,非基本数据类型初始化必须赋值。
复用类
1.组合2.继承3.代理(Java不支持)
继承
有参构造方法必须用super显示编写调用。
1.调用基类构造器2.按声明顺序调用成员初始化方法3.调用导出类构造器的主体
dispose()方法可以销毁对象,顺序与初始化顺序相反。
代理
将一个成员对象置于所要构造的类中(类似组合),也暴露了该成员对象的所有方法(类似继承)。
多态
分离做什么、怎么做,即将接口和现实分离开来,通过将细节私有化来实现,消除类型之间的耦合关系。(只完成行为方法,不在乎对象细节) 动态绑定、后期绑定、运行时绑定一个意思。 static、final(private方法属于final方法) 关键字关闭动态绑定。