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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔陈喜 中级黑马   /  2012-5-24 21:57  /  1754 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果我有也person类
class Person{
        private String name;
           private  int age;
      Person(){}
     Person( String name, int age){
    this.name=name ;
   this.age=age;
}
问题:如果我创建new Person("张三",23)时。内存里都做了哪些事情?
  
      
}
  

4 个回复

倒序浏览
首先这是一个匿名对象是在堆内存中开辟一片空间用来存储new Person并且通过构造把张三赋给了name,23赋给了age;
回复 使用道具 举报
1,如果你用到了new或者getInstance,就先加载Person这个类。
2,如果该类内部有静态代码块,就执行静态代码块
3,然后用该类内的成员变量初始化
4,如果有构造代码块就执行构造代码块
5,用构造方法进行对象实例化,包括属性赋新值
6,在堆内存中,开辟一块内存,把对象实体放进去
7,栈中存放对象引用,指向堆中实体的地址。
以上过程中,提到的静态代码块或者静态成员变量,都放在内存的方法区内(区别于栈和堆)
回复 使用道具 举报
1、创建一个匿名的对象
2、接受参数
3、寻找符合参数的构造方法
4、加载成员变量
5、执行构造方法里面的方法体

这一切都在内存中操作!
回复 使用道具 举报
这个问题在考基础啊。
new Person("张三",23):
1.在堆内存中创建一个Person对象,并初始化name和age的值,name=null;age=0;
2.传入"张三",23两个参数,在方法区中找到并运行对应的构造函数Person(String name,int age);
3.构造函数运行,将Person类中的name和age赋值为"张三"和"23"。
4.因为你创建的这个匿名对象毫无意义,随时会被垃圾清理器清除。  

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马