黑马程序员技术交流社区
标题:
创建对象时内存都干了什么?
[打印本页]
作者:
崔陈喜
时间:
2012-5-24 21:57
标题:
创建对象时内存都干了什么?
如果我有也person类
class Person{
private String name;
private int age;
Person(){}
Person( String name, int age){
this.name=name ;
this.age=age;
}
问题:如果我创建new Person("张三",23)时。内存里都做了哪些事情?
}
作者:
Zhang_qian
时间:
2012-5-24 22:24
首先这是一个匿名对象是在堆内存中开辟一片空间用来存储new Person并且通过构造把张三赋给了name,23赋给了age;
作者:
高云飞
时间:
2012-5-24 22:32
1,如果你用到了new或者getInstance,就先加载Person这个类。
2,如果该类内部有静态代码块,就执行静态代码块
3,然后用该类内的成员变量初始化
4,如果有构造代码块就执行构造代码块
5,用构造方法进行对象实例化,包括属性赋新值
6,在堆内存中,开辟一块内存,把对象实体放进去
7,栈中存放对象引用,指向堆中实体的地址。
以上过程中,提到的静态代码块或者静态成员变量,都放在内存的方法区内(区别于栈和堆)
作者:
真真姐
时间:
2012-5-24 22:38
1、创建一个匿名的对象
2、接受参数
3、寻找符合参数的构造方法
4、加载成员变量
5、执行构造方法里面的方法体
这一切都在内存中操作!
作者:
贾旭
时间:
2012-5-24 22:40
这个问题在考基础啊。
new Person("张三",23):
1.在堆内存中创建一个Person对象,并初始化name和age的值,name=null;age=0;
2.传入"张三",23两个参数,在方法区中找到并运行对应的构造函数Person(String name,int age);
3.构造函数运行,将Person类中的name和age赋值为"张三"和"23"。
4.因为你创建的这个匿名对象毫无意义,随时会被垃圾清理器清除。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2