黑马程序员技术交流社区
标题:
关于构造函数执行细节问题
[打印本页]
作者:
剑魂
时间:
2013-11-2 23:52
标题:
关于构造函数执行细节问题
//声明个人的类
class Person
{
private String name;
private int age;
Person(String name,int age){
this.name = name;
this.age = age;
System.out.println("name = "+name+",age = "+age);
}
}
class PersonDemo
{
public static void main(String[] args) {
Person p3 = new Person("li",16);
}
}
复制代码
建立类时,构造函数在栈内执行顺序如何,先在堆内建立空间,辅地址再传参,还是传参完成再赋地址给对象名变量啊?
作者:
王东
时间:
2013-11-3 00:05
1 首先new用到了person.class ,所以会先找到person.class并且加载到内存中
2 如果person有static成员的话,先加载静态成员。这个person类中没有。
3 在堆内存中开辟空间,分配内存地址。
4 在堆内存中建立对象的特有属性,并进行默认初始化。
5 对属性进行显示初始化
6 对对象进行构造代码块的初始化。person类中没有,略过
7 对对象进行对应的构造函数的初始化。
8 将内存地址赋给栈内存中的对象变量
作者:
ixiangfeng
时间:
2013-11-3 00:08
对象初始化过程:
1.在栈内建立变量
2.类加载进内存
3.执行静态代码块
4.在堆内存中开辟空间,分配内存地址
5.在堆内存中建立对象的特有属性,并进行默认初始化
6.对属性进行显示初始化
7.对对象进行构造代码块初始化
8.对对象进行对应的构造函数初始化
9.将内存地址赋给栈内存中的变量
作者:
mayor125
时间:
2013-11-3 00:21
我觉得应该是:类随着程序的加载而加载,主函数中的对象一创建就在堆内存中开辟内存空间,先将堆内存空间的地址赋给引用的栈内存对象名,然后再将对象中的参数传入到对应的构造函数中去。
作者:
李复安
时间:
2013-11-3 00:22
根据你的代码具体分析是:
主函数main进栈内存,堆内存里开辟内存空间
先传参完成构造函数的初始化之后,再把内存地址值赋给栈内存中的对象名变量。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2