通行证: 用户 密码
http://www.pconline.cn/
汽车网 | 游戏网 | 时尚女性
分站:北京 上海 广州 深圳 香港
广西 重庆 山东 江苏 辽宁 福建
首 页 | 今日报价 | 产业资讯 | 数码世界 | 硬件资讯 | 软件资讯 | 下 载 | 游 戏 |
论 坛 | 产 品 库 | 渠道商情 | 招聘培训 | 二    手 | 评 测 室 | 导 购 | 社 区 |
摄影
部落
手 机
数码相机
随身听
 DIY配件
笔记本
 台式机
摄像机
精品廊
-
您现在的位置: 软件资讯 > 开发特区 > 开发语言 > Java 免费新闻代码RSS新闻聚合
  详述:JAVA也能克隆! 出处:JR
[ 2005-09-09 10:33:32 ] 作者:hiswing 责任编辑:moningfeng

  两只羊是一模一样的(哪怕那只羊瘸腿)。让我们来看看代码。首先要注意的是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"。

  何为影子clone?先看一下例子。

//倒霉的羊
public class Sheep implements Cloneable{
private String name;
public void setName(String arg) {
name = arg;
}
public String getName() {
return name;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
//羊圈
public class Sheepfold implements Cloneable {
public Sheep sheep;
public String name;
public Sheepfold() {
sheep = new Sheep();
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
//克隆
public class Main {
public static void main(String[] args) throws Exception {
Sheepfold fold = new Sheepfold();
fold.name = "小羊圈";
fold.sheep.setName("小羊");
Sheepfold fold2 = (Sheepfold)fold.clone();
System.out.println(" fold2.name = " + fold2.name);
System.out.println(" fold2.sheep.getName() = " + fold2.sheep.getName());
fold2.name = "大羊圈";
fold2.sheep.setName("大羊");
System.out.println("=====================================");
System.out.println(" fold2.name = " + fold2.name);
System.out.println("* fold2.sheep.getName() = " + fold2.sheep.getName());
System.out.println(" fold.name = " + fold.name);
System.out.println("* fold.sheep.getName() = " + fold.sheep.getName());
System.out.println("=====================================");
}
}


Flash剧场全新改版,精品Flash让你看够玩够!


[上一页] [1] [2] [3] [下一页]

更多相关搜索: JAVA.. 指针.. 对象.. 引用.. 克隆..
正在加载评论,请稍候…

发给好友 我要报错 投稿给我们 加入收藏 返回顶部

本栏今日更新
相关文章
·新外观:苹果播放器iTunes新版放送!
·Google本地搜索推出,快去尝尝鲜!
·全新64位技术:江民KV2006发布
·先睹为快!Vista beta2 Preview截图
·绝密曝光:用百度窥视别人的收藏夹
·QQ群技巧:快速加人及保护群隐私
·让IE也拥有Firefox的七大最强武器
·详述:JAVA也能克隆!
·Java咖啡馆(13): 终结者
·路漫漫其修远兮 Java的发展路在何方
·打破Java定律:无需创建对象--Ioc容器革命
·Java/J2EE中文问题终极解决之道
·Struts终结者?对比组件框架技术tapestry
·揭开J2EE集群Cluster的神秘面纱
·为什么是Java EE 5
·论全世界所有程序员都会犯的错误

完美时尚娱乐:2004年腾讯QQ评测大观
精彩无限:MSN Shell4使用指南
亲手制作鲜花情人贺卡送给她
挑战伏明霞?企鹅跳水游戏,看你能得多少分?

新闻搜索
高级搜索
-
热点专题
·Macromedia Studio8专题
·挑战十大Flash智益游戏
·QQ辅助软件使用指南
·向"流氓软件"大声说不!
·惜别!毕业十大必唱歌曲
·搜索技巧:网罗天下的乐趣
·电脑艺术设计大师之路连载
·老歌歪唱Flash MV爆笑欣赏
更多...
Flash排行榜

·宇春:我心里只有你沒有他
·超级女声笔畅-《笔记》
·超女张含韵-《想唱就唱》
·密室逃脱游戏- 空房出逃
·爱情的宽容-《别人》
·搞笑动脑游戏-商店神偷
·惊险逃离游戏-逃离鬼屋
·雨夜恐怖古宅探秘游戏
·那些曾为你流下的眼泪
·紧急逃离-即将沉没的船

更多...
IT培训热门文章
· 月薪5万,微软最新面试题
· 微软召开黑客大会(图)
· 美军超级黑客特种部队揭密
· Linux下软件安装详解(图)
· 软考模拟软件(网络工程师)
· 2005年软件水平考试资料
· 世界编程大赛第1名写的程序
· 某变态公司的面试IQ题
更多...
PConline频道精选