注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
网友经验:手工剿灭木马“advapi
为imail和Mdaemon设计Webmail---
Jaz-drive HOWTO -- 1. 导言
Jaz-drive HOWTO -- 2. Jaz 磁碟
Jaz-drive HOWTO -- 3. 电脑确认
Jaz-drive HOWTO -- 4. Jaz 磁片
Jaz-drive HOWTO -- 5. Linux 上
Jaz-drive HOWTO -- 6. 从 Jaz 磁
AVL树的实现(源码)
使用CODECs压缩Wave音频
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> Java >> 文章正文
java克隆详述
作者:佚名  来源:不详  点击:  更新:2006-12-19
简介:

经常听到有人说java中没有指针。事实如此吗?no,java是有指针的,只不过换了个名字而已,也就是我们经常提到的引用。我们知道,在java中一切都是对象,那么我们如何操控对象?如何在成千上万的对象中找到我们所需的那个对象呢?又是如何让对象按照我们的意思来完成任务的呢?

Objecto=newObject();

这是java中最常见的语句了,在这句话中做了三件事。首先声明一个Object类型的变量o,在内存中为对象划分一块地址newObject(),将声明的变量指向内存中的对象。如此一来,我们就可以通过o来操纵对象了。就好像孩子们玩的遥控飞机,在空中飞行的是飞机,而使它做出优美动作的却是孩子们手中的摇控器。

"克隆"是如今听到的较多的词汇,听说已经将某只羊克隆了好几份了。但愿这种技术不要在人身上实验。java中也有"克隆",与现实世界的克隆一样,将一个实际存在的对象拷贝几份。如下:

//倒霉的羊
publicclassSheepimplementsCloneable{
privateStringname;
publicvoidsetName(Stringarg){
name=arg;
}
publicStringgetName(){
returnname;
}
publicObjectclone()throwsCloneNotSupportedException{
returnsuper.clone();
}
}
//克隆
publicclassMain{
publicstaticvoidmain(String[]args)throwsCloneNotSupportedException{
Sheepsheep=newSheep();//先得到那只羊的实例
sheep.setName("我是真的");//给它做个记号
System.out.println("sheep.getName()="+sheep.getName());
SheepsheepClone=(Sheep)sheep.clone();//开始克隆
System.out.println("sheepClone.getName()="+sheepClone.getName());
}
}

运行程序结果为:

sheep.getName()=我是真的
sheepClone.getName()=我是真的

两只羊是一模一样的(哪怕那只羊瘸腿)。让我们来看看代码。首先要注意的是Sheep类实现了Cloneable接口(该接口属于java.lang包,默认已经导入了),该接口中并没有定义要实现的方法,是个空接口,起标志作用。也就是说,实现了这个接口的羊就不再是只普通的羊,它是一只可以被克隆的羊。再往下看,有个clone方法,返回Object类型的对象,并抛出CloneNotSupportedException异常。该方法覆写了父类(Object)的clone方法,并在最后调用了super.clone(),这也意味着无论clone类继承结构是什么样的,super.clone()都会直接或间接调用Object类的clone()方法。看看jdk帮助文档会发现,Object类的clone()是一个native方法,我们知道,native方法的效率一般来说都是远高于java中的非native方法。这也说明了new一个对象,然后将原对象中的数据导入到新创建的对象中去的做法是多么愚蠢。必须说明的是Object中的clone方法是protected的,所以要使用clone就必须继承Object类(默认)。并且为了可以使其它类调用该方法,必须将其作用域设置为public。

以上只是一个简单clone的实现。明天说说"影子clone"和"深度clone"。

夜,深了。






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务