打字猴:1.70046181e+09
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所示。
1700461831
1700461832 代码清单13-10 浅拷贝
1700461833
1700461834 public class Thing implements Cloneable{
1700461835
1700461836 //定义一个私有变量
1700461837
1700461838 private ArrayList<String>arrayList=new ArrayList<String>();
1700461839
1700461840 @Override
1700461841
1700461842 public Thing clone(){
1700461843
1700461844 Thing thing=null;
1700461845
1700461846 try{
1700461847
1700461848 thing=(Thing)super.clone();
1700461849
1700461850 }catch(CloneNotSupportedException e){
1700461851
1700461852 e.printStackTrace();
1700461853
1700461854 }
1700461855
1700461856 return thing;
1700461857
1700461858 }
1700461859
[ 上一页 ]  [ :1.70046181e+09 ]  [ 下一页 ]