java克隆clone之浅克隆和深度克隆

 时间:2024-10-28 08:45:04

1、jdk,Object类定义了clone方法,是native方法,方法的注释如下,有一很重要的注释是:(1)如果类不实现Cloneable接口,克隆时就会抛出CloneNotSupportedException异常;

java克隆clone之浅克隆和深度克隆

2、(2)编写测试类TestClone1,测试这种情况,发现确实会抛出异常。

java克隆clone之浅克隆和深度克隆
java克隆clone之浅克隆和深度克隆

3、注意,Object类中的clone方法是这样定义的:protected native Object clone() throws CloneNotSupportedException;其权限是用protected修饰的,表示这个方法只能被自身或者其子类中调用,其他地方不能调用。

4、实现浅克隆(1)编写Bean1,定义一个字符串。

java克隆clone之浅克隆和深度克隆

5、(2)编写Bean2,实现Cloneable接口,定义一个基本类型变量i,和一个引用变量bean1,添加get set方法;重写clone方法,调用Object类中的clone方法。

java克隆clone之浅克隆和深度克隆

6、(3)编写测试类:TestClone2。创建一个Bean2类的实例t1,给t1的成员变量i和bean1赋值,然后根据实例t1克隆实例t2,比较t1和t2的值。

java克隆clone之浅克隆和深度克隆

7、(4)查看输出:发现t2和t1不是同一个引用,t2的i也变成了10,正常。但是t2的bean1引用和t1的bean1引用相同,通过t2给bean1对象的str赋值“xyx”,发现t1也被改变了,这也就足以说明了浅克隆

java克隆clone之浅克隆和深度克隆

8、深度克隆:要想实现深度克隆,就必须将幞洼踉残Bean2中的引用变量bean1属性也进行克隆(1)使Bean1实现Cloneable接口,重写c造婷用痃lone方法,调用Object的clone方法,克隆当前对象(2)重新修改Bean2中的clone方法,将bean1变量的克隆结果obj,存储到t中。

java克隆clone之浅克隆和深度克隆
java克隆clone之浅克隆和深度克隆

9、(3)运行测试程序:发现此时t2中的bean1和t1的不同了,且修改t2中的bean1的str值,不会影响到t1。至此一个简单的深度克隆也结束了,如果要克隆某个对象,则这个对象要实现Cloneable接口,并且要重写clone方法。深度克隆,就是对被克隆对象的每一个引用类型的属性都进行克隆,一层层克隆,可以实现所有引用类型的覆盖。

java克隆clone之浅克隆和深度克隆
  • 环氧酚醛漆说明与施工步骤指导
  • 教您如何饮熊胆茶养生
  • 资本力量注入,是否给教育行业带来新的机遇?
  • 真我x7pro至尊版应用替身怎么用
  • 芳纶如何粘接牢固
  • 热门搜索
    爱国主义手抄报内容 关于消防的手抄报图片 英语节日手抄报图片 生态文明手抄报内容 关于环境保护的手抄报 关于数学手抄报图片 一年级感恩手抄报 有关写字的手抄报 保护树木的手抄报 讲普通话手抄报内容