黑马程序员技术交流社区

标题: 关于构造函数执行细节问题 [打印本页]

作者: 剑魂    时间: 2013-11-2 23:52
标题: 关于构造函数执行细节问题
  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. }
复制代码
建立类时,构造函数在栈内执行顺序如何,先在堆内建立空间,辅地址再传参,还是传参完成再赋地址给对象名变量啊?

作者: 王东    时间: 2013-11-3 00:05
1 首先new用到了person.class ,所以会先找到person.class并且加载到内存中
2 如果person有static成员的话,先加载静态成员。这个person类中没有。
3 在堆内存中开辟空间,分配内存地址。
4 在堆内存中建立对象的特有属性,并进行默认初始化。
5 对属性进行显示初始化
6 对对象进行构造代码块的初始化。person类中没有,略过
7 对对象进行对应的构造函数的初始化。
8 将内存地址赋给栈内存中的对象变量
作者: ixiangfeng    时间: 2013-11-3 00:08
对象初始化过程:
1.在栈内建立变量
2.类加载进内存
3.执行静态代码块
4.在堆内存中开辟空间,分配内存地址
5.在堆内存中建立对象的特有属性,并进行默认初始化
6.对属性进行显示初始化
7.对对象进行构造代码块初始化
8.对对象进行对应的构造函数初始化
9.将内存地址赋给栈内存中的变量
作者: mayor125    时间: 2013-11-3 00:21

我觉得应该是:类随着程序的加载而加载,主函数中的对象一创建就在堆内存中开辟内存空间,先将堆内存空间的地址赋给引用的栈内存对象名,然后再将对象中的参数传入到对应的构造函数中去。
作者: 李复安    时间: 2013-11-3 00:22
根据你的代码具体分析是:
主函数main进栈内存,堆内存里开辟内存空间
先传参完成构造函数的初始化之后,再把内存地址值赋给栈内存中的对象名变量。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2