A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘江华 黑马帝   /  2011-10-22 14:36  /  2504 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对Java克隆不懂,它是怎么回事。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 不懂就问,加分。

查看全部评分

4 个回复

倒序浏览
简单说  就是  复制 对象,,得到一个 对象的副本,,包含的  属性  值  与  原对象的  相同
Object 的 clone() 是 受保护的,且 它本身 不实现 Cloneable接口,,所以 当一个类
没有实现 Cloneable 接口,,就直接调用  super.clone() ——这时是调用的Object的clone()  ,, 是不可以的
会导致抛出 CloneNotSupportedException 异常,需要先实现 Cloneable 接口,,
如:     class A implements Cloneable {  public Object clone() { Object obj=null; obj = super.clone(); return obj }  }
             main(...){   A a = new A();    A b = (A)a.clone();    }

影子克隆: 若还有个类 class B{..}  当在A 类中有属性 public B b = new B();
                在克隆后,,会发现,,A类中的 一些基本属性 能被真正克隆,即 在改变 克隆得到的对象里的基本属性值时,,原对象不改变,,
                                  而 在改变 B对象中的属性值 时,,原对象也 改变了,,,,
           这样,,这个克隆  就不是真正的克隆了,,
深度克隆: 让 class B也实现Cloneable接口,,实现 clone(),, 在A 调用了super.clone()后,,也把它的属性 b = (Clone)b.clone();
                 这样引用对象和基本对象都 实现了 克隆。。。。
不能克隆的类:  String,Integer,Double等等,,,它们没有实现 Cloneable接口,,且 是final 修饰的类,,

详细请看:http://www.blogjava.net/jerry-zhaoj/archive/2009/10/14/298141.html

评分

参与人数 1技术分 +2 收起 理由
admin + 2 谢谢分享

查看全部评分

回复 使用道具 举报
杨杰 黑马帝 2011-10-22 16:56:21
藤椅
本帖最后由 杨杰 于 2011-10-22 16:57 编辑



好吧,这里有篇博客,很详细。http://dcriori.iteye.com/blog/397259

评分

参与人数 1技术分 +1 收起 理由
admin + 1 山寨

查看全部评分

回复 使用道具 举报
咖啡 黑马帝 2011-10-22 21:55:32
板凳
就是复制的意思
回复 使用道具 举报
谢谢。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马