黑马程序员技术交流社区

标题: 关于构造函数,问个问题 [打印本页]

作者: Carter    时间: 2014-11-5 11:01
标题: 关于构造函数,问个问题
视频中说的当类中没有定义构造函数时候,会自动定义默认的空参数构造函数,否则不能对对象进行初始化。问题来了,对象存在于堆内存中,堆内存会自动对其中的实体进行初始化,为什就说不定义构造函数(包括空参数的构造函数)就不能对对象进行初始化了

作者: 14年7月想去it    时间: 2014-11-5 16:49
构造函数分为有参数的和无参数的,定义有参数的构造函数时要定义空参数的构造函数否则发送编译错误,调用构造函数时会调用默认的构造器,没有构造函数就不能调用构造器,所以就不能呗初始化
作者: 桃华月禅    时间: 2014-11-5 19:28
创建一个类会在内存中做出以下事情!
1.先把字节码文件*.class文件加载进内存中。
2.方法和静态属性定义在方法区中。
3.静态代码块初始化(有的话)
4.在堆内存中开辟空间,分配地址值。
5.在堆内存中创建对象,并进行默认初始化。
6.对属性进行显示初始化。
7.构造代码块初始化。
8.构造函数初始化。
9.内存地址值分配给类变量。

LZ提到的堆内存初始化是此过程的步骤5而已,构造函数初始化和此初始化都是建立一个对象不能缺少的步骤。
具体为什么不能缺少,其实我也不大清楚,恳请大神解答!
2L的意思是构造函数会调用构造器,着我不大清楚,我有空查查吧!
作者: Carter    时间: 2014-11-5 19:30
14年7月想去it 发表于 2014-11-5 16:49
构造函数分为有参数的和无参数的,定义有参数的构造函数时要定义空参数的构造函数否则发送编译错误,调用构 ...

越看越糊涂了。。。
作者: Carter    时间: 2014-11-5 19:33
桃华月禅 发表于 2014-11-5 19:28
创建一个类会在内存中做出以下事情!
1.先把字节码文件*.class文件加载进内存中。
2.方法和静态属性定义在 ...

哦,明白了,二楼说的构造器其实就是构造函数,在java中应该叫构造方法,在c++中才叫构造函数
作者: wanmei0398    时间: 2014-11-5 19:37
在单例模式设计时,毕老师说讲构造函数进行私有化后,就不能建立对象。
你说:不定义构造函数中包括空参数的构造函数吗?包含的话,没有构造函数,应该也不能建立对象,怎么初始化啊。
作者: Carter    时间: 2014-11-5 23:07
wanmei0398 发表于 2014-11-5 19:37
在单例模式设计时,毕老师说讲构造函数进行私有化后,就不能建立对象。
你说:不定义构造函数中包括空参数 ...

我懂了,开始把视频里面的话理解错了,构造函数是伴随new关键字,用来建立对象并对对象进行初始化,并不是单纯的进行初始化,所以,构造函数是必须的
作者: 桃华月禅    时间: 2014-11-6 21:51
其实我一直不知道是称为构造函数还是构造方法,都是看心情,想起哪个叫哪个...你确定Java中叫构造方法?我最近一直叫她构造函数的...
作者: 王世虎    时间: 2014-11-7 01:20
二楼所列举的很具体,这是对象初始化的时候虚拟机所操作的。
毕老师视频中有详细的说明(讲静态方法的时候列举的很详细 day06-07对象的初始化过程)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2