导航:首页 > 编程语言 > java中的克隆

java中的克隆

发布时间:2023-06-16 10:17:16

java 如何复制对象

可以使用clone来实现,clone用于为引用类型的复制
1.使用clone方法的类必须先实现Cloneable接口,不然clone方法会直接返回CloneNotSupportedException不支持克隆的异常
2、实现Cloneable接口的类应该使用公共方法重写 Object.clone(它是受保护的)。某个对象实现了此接口就克隆它是不可能的。即使 clone 方法是反射性调用的,也无法保证它将获得成功。
3、在Java.lang.Object类中克隆方法是这么定义的:
protected Object clone()
throws CloneNotSupportedException
创建并返回此对象的一个副本。表明是一个受保护的方法,同一个包中可见。

② 关于java克隆对象

--在使用抄clone方法时,对于每一个类,都袭需要做如下判断:
1--默认的clone方法是否能满足要求
2--默认的clone方法是否能通过调用可变子对象的clone方法修补
3--是否不应该使用clone
----如选择1和2,就必须实现Cloneable接口,使用public重定义clone方法
意思就是,你如果想用clone方法,首先要考虑Object的clone能不能满足你的需求,如果可以,那好,直接调用,反之,你就得必须在需要使用clone方法的类中实现Cloneable接口,自己写一个Clone规则。

③ java如何实现对象的克隆

可以重载clone方法克隆对象

首先、该类要实现Cloneable的接口,不然执行clone方法内的时候会抛出CloneNotSupportedException异常

然后容、就在该类重载clone方法,自己加上克隆的逻辑,本人小白,手敲的代码

{

privateStringname;

publicBook(Stringname){
this.name=name;
}

@Override
publicBookclone(){
returnnewBook(this.name);
}
}

④ java里关于克隆的问题,所有类都是Object的子类何必在复写clone方法

深度克隆的问题,如果类中成员包含集合类,如list等,或者包含map的,默认的clone方法为浅克隆,不会复制集合中的元素。如果复写clone方法,则可根据需求来复制成员。

⑤ java中的浅克隆和深克隆是什么

浅克隆:仅仅复制所克隆的对象,而不复制它所引用的对象。

被复制版对象的所有变量都含有与原来权的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。


深克隆:把要复制的对象所引用的对象都复制了一遍。

那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。


很明显二者时间消耗有差距,在不影响的情况下尽量用浅克隆

注意区分与C语言的浅克隆深克隆 那个是引用地址与重新分配地址构建的区别,详细可以参见:

http://www.cnblogs.com/yxnchinahlj/archive/2010/09/20/1831615.html

⑥ 如何进行Java对象的克隆

以数组对象的克隆为例。

Java程序

publicclassMain{
publicstaticvoidmain(String[]args){
int[]a={1,2,3};
int[]b=a.clone(); //b是a的克隆,a和b指向不同的数组
int[]c=a; //c是a的引用,a和c指向同一个数组

a[0]=10;

System.out.println("a[0]="+a[0]);
System.out.println("b[0]="+b[0]);
System.out.println("c[0]="+c[0]);
}
}


运行测试:

a[0]=10
b[0]=1
c[0]=10

自定义类的情况如下:

publicclassMain{
publicstaticvoidmain(String[]args){
Aa1=newA();
a1.name="Smith";

Aa2=a1;
Aa3=(A)a1.clone();

a1.name="White";

System.out.println("a1:"+a1.name);
System.out.println("a2:"+a2.name);
System.out.println("a3:"+a3.name);
}
}

classAimplementsCloneable{
publicStringname=null;

@Override
publicObjectclone(){
Aa=null;
try{
a=(A)super.clone();
}
catch(CloneNotSupportedExceptione){
e.printStackTrace();
}
returna;
}
}


运行测试:

a1:White
a2:White
a3:Smith

⑦ java中对象的克隆疑问

Object o1=new Object();
System.out.println(o1.hasCode());//打印o1的内存地址。
Object o2=new Object();
System.out.println(o2.hasCode());//打印o2的内存地址。
可见o1和o2拥有不同的内存数据,如果你让o2=o1,那o1和o2的地址就一样了,就是一个对象了,怎么还叫克隆?
老祖宗Object类的clone方法是将一个对象的数据原封不动的复制到另一个对象中去,比如o2=o1.clone();就将o1的数据复制了一份考贝到了另一块内存中,所以o2与o1地址不一样但数据相同。
你这里的super.clone();就是调用的Object类的clone()方法,调用Object的方法不就是省得你自己写了吗。
你可能还会问Object既然有clone()方法,而所有的类都是Object类的子类,那所有的类不都有clone()方法吗,干什么还自己写?Object类虽然有clone()方法,但是访问控制符是protected而不是public,于是别的类不可见,所以你需要重写它:

@Override
public Object clone(){
Object obj=null;
try {
obj= super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
而且你需要将你的类实现cloneable接口,这是必须的。

⑧ java里的克隆方法是什么意思有实例吗》

//实现表示可克隆
{
publicStringname;//名字
publicIntegerage;//年龄
publicStudent(Stringname,Integerage){
super();
this.name=name;
this.age=age;
}
publicStringgetName(){
returnthis.name;
}


publicstaticvoidmain(String[]args)throwsException{
Students=newStudent("张三",10);
Students_clone=(Student)s.clone();//克隆一个student
System.out.println(s_clone.getName());//输出张三,跟原来的一样

}

}

阅读全文

与java中的克隆相关的资料

热点内容
网络中常用的传输介质 浏览:518
文件如何使用 浏览:322
同步推密码找回 浏览:865
乐高怎么才能用电脑编程序 浏览:65
本机qq文件为什么找不到 浏览:264
安卓qq空间免升级 浏览:490
linux如何删除模块驱动程序 浏览:193
at89c51c程序 浏览:329
怎么创建word大纲文件 浏览:622
袅袅朗诵文件生成器 浏览:626
1054件文件是多少gb 浏览:371
高州禁养区内能养猪多少头的文件 浏览:927
win8ico文件 浏览:949
仁和数控怎么编程 浏览:381
项目文件夹图片 浏览:87
怎么在东芝电视安装app 浏览:954
plc显示数字怎么编程 浏览:439
如何辨别假网站 浏览:711
宽带用别人的账号密码 浏览:556
新app如何占有市场 浏览:42

友情链接