黑马程序员技术交流社区

标题: 构造函数? [打印本页]

作者: langmb    时间: 2015-3-15 17:23
标题: 构造函数?
本帖最后由 langmb 于 2015-3-16 00:14 编辑

构造函数给对象进行初始化的过程是怎样的呢
作者: 健健    时间: 2015-3-15 17:40
  我也想知道
作者: 艺多不压身丶    时间: 2015-3-15 17:45
健健 发表于 2015-3-15 17:40
我也想知道

将类字节码文件加载进内存。
执行静态代码块,给类进行初始化。
在堆内存中开辟空间,分配内存地址。
在堆内存中建立特有属性,进行默认初始化。
对属性进行显示初始化。
对对象执行构造代码块初始化。
对对象进行构造函数初始化。
将内存地址赋给栈内存中的变量。
作者: huhanghao    时间: 2015-3-15 18:25
艺多不压身丶 发表于 2015-3-15 17:45
将类字节码文件加载进内存。
执行静态代码块,给类进行初始化。
在堆内存中开辟空间,分配内存地址。

若有静态的属性和静态的方法又当如何?
作者: huhanghao    时间: 2015-3-15 18:44
艺多不压身丶 发表于 2015-3-15 17:45
将类字节码文件加载进内存。
执行静态代码块,给类进行初始化。
在堆内存中开辟空间,分配内存地址。

在C中一般讲一般变量放入栈当中,而全局变量,静态变量放入堆当中。对于java来说万物皆对象,我们岂不是都在调用堆中内容。那么一个方法中传入的局部变量,我们是放在栈当中咯。不知道回复中最后一句怎么理解啊?怎么又出现了栈

作者: huhanghao    时间: 2015-3-15 18:52
huhanghao 发表于 2015-3-15 18:44
在C中一般讲一般变量放入栈当中,而全局变量,静态变量放入堆当中。对于java来说万物皆对象,我们岂不是 ...

当然是堆内,因为是对象
作者: huhanghao    时间: 2015-3-15 19:05
huhanghao 发表于 2015-3-15 18:52
当然是堆内,因为是对象

啊!!是这样的!记起来了!:#。
作者: huhanghao    时间: 2015-3-15 19:06
huhanghao 发表于 2015-3-15 18:52
当然是堆内,因为是对象

p的概念相当于指针,指向创建的对象在堆内存中的地址
作者: 执念    时间: 2015-3-15 19:38
云烟雾绕

作者: 胡谭龙    时间: 2015-3-16 16:32
一般我们讲的“函数”就是“方法”;构造函数=构造方法;构造方法是一种特殊的方法,具有以下特点。(1)构造方法的方法名必须与类名相同。(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。(4)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。(5)构造方法可以重载,以参数的个数,类型,或排列顺序区分。    2.请注意这句话:(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。也就是上面你的构造函数根本就没有传递参数给它,也就是说你在构造函数声明的int age=10,只是相当于函数里的一个变量,超出这个函数就失去作用了,也就是说为默认的int值为0.   3.如果是要初始化成员变量,最好还是构造有参。
作者: 谢鸿    时间: 2015-3-16 18:54
额额!!看视频去。。。




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