A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© langmb 中级黑马   /  2015-3-15 17:23  /  1359 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 langmb 于 2015-3-16 00:14 编辑

构造函数给对象进行初始化的过程是怎样的呢

14 个回复

倒序浏览
  我也想知道
回复 使用道具 举报

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

若有静态的属性和静态的方法又当如何?

点评

在堆内存中开辟空间,分配内存地址。 在堆内存中建立特有属性,进行默认初始化。  发表于 2015-3-15 18:35
回复 使用道具 举报
艺多不压身丶 发表于 2015-3-15 17:45
将类字节码文件加载进内存。
执行静态代码块,给类进行初始化。
在堆内存中开辟空间,分配内存地址。

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

点评

Person p=new Person();你觉得P会放在栈内存还是堆内存?  发表于 2015-3-15 18:49
回复 使用道具 举报
huhanghao 发表于 2015-3-15 18:44
在C中一般讲一般变量放入栈当中,而全局变量,静态变量放入堆当中。对于java来说万物皆对象,我们岂不是 ...

当然是堆内,因为是对象

点评

P只是一个引用型变量,存在栈内存,他指向堆内存中的Person对象。可以这么说。  发表于 2015-3-15 19:02
P是一个什么?  发表于 2015-3-15 18:58
回复 使用道具 举报
huhanghao 发表于 2015-3-15 18:52
当然是堆内,因为是对象

啊!!是这样的!记起来了!:#。
回复 使用道具 举报
huhanghao 发表于 2015-3-15 18:52
当然是堆内,因为是对象

p的概念相当于指针,指向创建的对象在堆内存中的地址
回复 使用道具 举报
执念 中级黑马 2015-3-15 19:38:17
9#
云烟雾绕
回复 使用道具 举报
一般我们讲的“函数”就是“方法”;构造函数=构造方法;构造方法是一种特殊的方法,具有以下特点。(1)构造方法的方法名必须与类名相同。(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。(4)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。(5)构造方法可以重载,以参数的个数,类型,或排列顺序区分。    2.请注意这句话:(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。也就是上面你的构造函数根本就没有传递参数给它,也就是说你在构造函数声明的int age=10,只是相当于函数里的一个变量,超出这个函数就失去作用了,也就是说为默认的int值为0.   3.如果是要初始化成员变量,最好还是构造有参。
回复 使用道具 举报
额额!!看视频去。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马