打字猴:1.700461781e+09
1700461781 Thing thing=null;
1700461782
1700461783 try{
1700461784
1700461785 thing=(Thing)super.clone();
1700461786
1700461787 }catch(CloneNotSupportedException e){
1700461788
1700461789 e.printStackTrace();
1700461790
1700461791 }
1700461792
1700461793 return thing;
1700461794
1700461795 }
1700461796
1700461797 }
1700461798
1700461799 然后我们再来写一个Client类,进行对象的拷贝,如代码清单13-9所示。
1700461800
1700461801 代码清单13-9 简单的场景类
1700461802
1700461803 public class Client{
1700461804
1700461805 public static void main(String[]args){
1700461806
1700461807 //产生一个对象
1700461808
1700461809 Thing thing=new Thing();
1700461810
1700461811 //拷贝一个对象
1700461812
1700461813 Thing cloneThing=thing.clone();
1700461814
1700461815 }
1700461816
1700461817 }
1700461818
1700461819 运行结果如下所示:
1700461820
1700461821 构造函数被执行了……
1700461822
1700461823 对象拷贝时构造函数确实没有被执行,这点从原理来讲也是可以讲得通的,Object类的clone方法的原理是从内存中(具体地说就是堆内存)以二进制流的方式进行拷贝,重新分配一个内存块,那构造函数没有被执行也是非常正常的了。
1700461824
1700461825
1700461826
1700461827
1700461828 设计模式之禅 13.4.2 浅拷贝和深拷贝
1700461829
1700461830 在解释什么是浅拷贝和什么是深拷贝之前,我们先来看个例子,如代码清单13-10所示。
[ 上一页 ]  [ :1.700461781e+09 ]  [ 下一页 ]