黑马程序员技术交流社区

标题: 创建对象时内存都干了什么? [打印本页]

作者: 崔陈喜    时间: 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