标题: 两个内存的问题:构造函数和对象 [打印本页] 作者: zhaishuang 时间: 2012-4-18 23:18 标题: 两个内存的问题:构造函数和对象 创建对象并对构造函数初始化时,构造函数是在方法区中还是在栈内存中。还有对象是不是只能在堆内存中。如String s = new("abc");大家都知道这语句执行完之后有两个对象。看见有的人说s是在栈内存中对象。
希望有大侠懂内存帮忙指导。作者: liuyang 时间: 2012-4-18 23:26
Person p = new Person("zhangsan",20);
该句话做了如下事件:
1.因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中
2.执行该类中的static代码块,如果有的话。给Person.class类进行初始化
3.在堆内存中开辟空间,分配内存地址
4.在堆内存中建立对象的特有属性,并进行默认初始化
5.对属性进行显示初始化
6.对对象进行构造代码块初始化。
7.对对象进行对应的构造函数初始化。
8.将内存地址付给栈内存中的p变量。作者: zhaishuang 时间: 2012-4-18 23:32
liuyang 发表于 2012-4-18 23:26
Person p = new Person("zhangsan",20);
该句话做了如下事件:
1.因为new用到了Person.class,所以会先找到 ...
您说的这个我了解的,就是比较糊涂方法区。。。谢谢你的回答作者: 黄或俊 时间: 2012-4-19 00:25
个人理解是构造函数是放在栈内存中的;
Person p = new Person(2);先在栈内存中划分一块内存给p这个局部变量,然后如果构造函数有参数的话会在栈内存中分配参数变量,最后在堆内存中分配一块空间,里面包含这几个变量,由栈中的参数把变量传递过来,然后参数变量占用的内存就消失了。即当一个方法调用完成后,栈里面为他分配的空间全部消失。 作者: 邓斌 时间: 2012-4-19 01:03
创建对象并对构造函数初始化时,构造函数是在方法区中还是在栈内存中。还有对象是不是只能在堆内存中。如String s = new("abc");大家都知道这语句执行完之后有两个对象。看见有的人说s是在栈内存中对象。