一、产生一个对象一定要执行构造函数吗?
当然不是!!!!
1、通过new产生一个对象
(1)先看new操作符后的类型,知道类型,分配相应大小的内存空间
(2)再调用构造函数,填充对象的各个域(对象初始化)
(3)构造函数执行后,一个对象创建完毕,可以把他的引用(地址)发布到外部,在外部可以使用这个引用操作操纵这个对象
2、反射-------请移步查看类加载机制以及Java-Reflect(反射)
(其本质还是newInstance()去找正确的构造)
3、clone()----重点来啦
(1)clone第一步和new相似,都是分配内存
(2)调用clone()时,分配的内存和源对象(即调用clone()的对象)相同,然后再使用原有对象中对应的各个域,填充新对象的域。
(3)填充完成后,clone()返回,一个新的相同的对象被创建,同样可以把新对象引用发到外部
来段代码感受一下
public class Thing implements Cloneable {
public Thing() {
// TODO Auto-generated constructor stub
System.out.println("构造函数被执行......