j2se----clone

[code]
对象克隆
protected Object clone()
以上的方法不能直接调用,需要实现Cloneable接口
class Person implements Cloneable{
private String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public Object clone(){
return super.clone(); //虽然自己不知道克隆,但是Object知道啊
}
}


在以后的JAVA类库中会经常看到Clonable接口出现,只有实现了此接口的对象才能被克隆
尽管Object里面有克隆方法

Clonable---告诉JVM这个对象可能被拷贝
public Object clone(){//---重写 clone说明这个对象可以被拷贝
return super.clone(); //虽然自己不知道克隆,但是Object知道啊
}

但是上面的属于浅拷贝:,Object 类提供的方法clone 只是拷贝本对象,其对象内部的数组、引用对象等都不拷贝,还是指向原生对象的内部元素地址,这种拷贝就叫做浅拷贝,确实是非常浅,两个对象共享了一个私有变量。。。。是一个种非常不安全的方式,在实
际项目中使用还是比较少的

深入的拷贝:

public class Thing implements Cloneable{
//定义一个私有变量
private ArrayList<String> arrayList = new ArrayList<String>();
@Override
public Thing clone(){
Thing thing=null;
try {
thing = (Thing)super.clone();
thing.arrayList = (ArrayList<String>)this.arrayList.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return thing;
}
}
Clone与final两对冤家。对象的clone 与对象内的final属性是由冲突的

private final ArrayList<String> arrayList = new ArrayList<String>();

你要使用clone 方法就在类的成员变量上不要增加final 关键字。
原型模式适合在什么场景使用?一是类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等;二是通过new 产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式;三是一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用。在实际项目中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过clone的方法创建一个对象,然后由工厂方法提供给调用者。

[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值