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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 剑魂 中级黑马   /  2013-11-2 23:52  /  1016 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. //声明个人的类
  2. class Person
  3. {
  4.         private String name;
  5.         private int age;
  6.        
  7.         Person(String name,int age){
  8.                 this.name = name;
  9.                 this.age = age;
  10.                 System.out.println("name = "+name+",age = "+age);
  11.         }
  12.        
  13. }


  14. class  PersonDemo
  15. {
  16.         public static void main(String[] args) {
  17.                 Person p3 = new Person("li",16);
  18.         }
  19. }
复制代码
建立类时,构造函数在栈内执行顺序如何,先在堆内建立空间,辅地址再传参,还是传参完成再赋地址给对象名变量啊?

评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

4 个回复

倒序浏览
1 首先new用到了person.class ,所以会先找到person.class并且加载到内存中
2 如果person有static成员的话,先加载静态成员。这个person类中没有。
3 在堆内存中开辟空间,分配内存地址。
4 在堆内存中建立对象的特有属性,并进行默认初始化。
5 对属性进行显示初始化
6 对对象进行构造代码块的初始化。person类中没有,略过
7 对对象进行对应的构造函数的初始化。
8 将内存地址赋给栈内存中的对象变量

评分

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

查看全部评分

回复 使用道具 举报
对象初始化过程:
1.在栈内建立变量
2.类加载进内存
3.执行静态代码块
4.在堆内存中开辟空间,分配内存地址
5.在堆内存中建立对象的特有属性,并进行默认初始化
6.对属性进行显示初始化
7.对对象进行构造代码块初始化
8.对对象进行对应的构造函数初始化
9.将内存地址赋给栈内存中的变量
回复 使用道具 举报

我觉得应该是:类随着程序的加载而加载,主函数中的对象一创建就在堆内存中开辟内存空间,先将堆内存空间的地址赋给引用的栈内存对象名,然后再将对象中的参数传入到对应的构造函数中去。
回复 使用道具 举报
根据你的代码具体分析是:
主函数main进栈内存,堆内存里开辟内存空间
先传参完成构造函数的初始化之后,再把内存地址值赋给栈内存中的对象名变量。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马