最近在复习课程到第三章时,在学习不变量时一个很重要的方面就是防止内存泄露。通常防止内存泄露有两种方式。
其一,就是使数据都是不可变类型;
其二,是进行防御式拷贝。
在这里提到了clone()方法是得到原实例的一个拷贝,内容完全一样。但在对其中一个实例进行操作时不会对里一个产生干扰。现在看一下java的具体实现。
首先,使你自定义的类实现cloneable。在这里我编写的类名为student
public class Student implements Cloneable
之后实现其中的clone()方法
public Object clone() throws CloneNotSupportedException{
return super.clone();
}
这时看上去已经完成,测试也会发现其中内容相同。但是有一个很重要的问题——引用。
当你自定义的类中所有属性都是基本数据类型,那么没问题,功能已经实现。但是如果你的属性中有可变数据类型,且并未实现clone(),那么测试时你会发现对其中一个实例的修改会影响到另一个,这不是我们想要的。那么这时就要进行深拷贝,将引用指向新的内存地址,将原来的内容复制。即对其中不符合数据类型,实现clone方法。