一个实现了Cloneable并重写了clone方法的类,通过重写的clone 方式克隆出来的对象是不会执行构造函数的
public class Thing implements Cloneable{
public Thing(){
System.out.println("构造函数被执行了");
}
@Override
public Thing clone(){
Thing thing = null;
try {
thing = (Thing) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
System.out.println("克隆失败");
}
return thing;
}
}
public class main {
public static void main(String[] args) {
Thing thing = new Thing();
Thing thing1 = thing.clone();
}
}
原因:
对象拷贝的时候构造函数的确没有被执行,因为object类的clone方法是从堆内存中以二进制流的方式进行拷贝,重新分配一个内存块,那构造函数没有被执行也是非常正常的