本帖最后由 韩松范 于 2013-3-7 16:21 编辑
在new对象的时候,其实不是先调用构造函数
而是先在内存中开辟空间(当然之前还有把.class文件加载进内存,还有执行静态代码块)
开辟完空间,分配地制值,在栈内存中开辟引用变量空间。
然后在对内存中建立对象的特有属性,进行默认初始化,接着再对属性进行显示初始化。
如果有构造代码块,还要进行构造代码块初始化
接着才会调用构造函数,对对象进行初始化,
也就是说构造函数,不是用来建立对象,而是用来对已经建立好的对象进行初始化。。。。。。。。
然后虚拟机会把,在堆内存开辟空间后分配到的地址值,传给栈内存中的引用变量。
所以String str = new String("content");中
str的值和调用到构造函数无关。
还记得那句说顺了的话吗?
对象一建立就会调用构造函数(所以构造函数可不是用来建立对象的。对象都已经建完了)
而不是构造函数一调用就会建立对象。。。。。。
|