java对象初初始化过程

来源:互联网 发布:淘宝代练剑三 编辑:程序博客网 时间:2024/05/19 02:41

我是新人如有错误请多指教!

首先来说下内存里面的情况,java在分配内存,分为寄存器:和cpu打交道的,本机方法栈:主要是使用windows或linux的系统文件的,方法区:这个地方是存储.class文件的地方还包括静态方法和常量池的,剩下的就是我们最重要的两部分,,堆和栈,堆:保存对象的实例对象,而栈:是运行程序过程的实现地方。

首先java从main方法开始执行程序,将加载main方法到栈中,然后执行main方法里面的,如果遇到实例化对象的话,会在堆中将对象的具体的成员变量存储起来,没有初始化的话,初始化成员变量的默认值。然后执行对象的构造方法,在这个时候,如果这个对象的类有父类的话,也要执行父类的构造方法,这之间也要执行代码块,先执行父类的静态的,再执行子类的静态的代码块,执行父类一般代码块,再执行子类一般的代码块,在 执行父类的构造方法,再执行子类的构造方法。最后将对象的地址值返回给对象声明。简洁如下:

Test  test= new Test();


1.在内存中栈中开辟一块地方将test开出来  

2.在堆中开辟出Test类的地方


3.执行父类的静态的代码块(没有跳过)

4.执行子类的静态代码块(没有跳过)

5.执行父类的一般代码块(没有跳过)

6.初始化父类;

7.执行父类的构造方法

初始化子类;

8.执行子类的构造方法 

9.将堆中生成的对象地址值,返还给栈中的test变量

10.等待虚拟机自动销毁堆中的对象




典型代码:


class X {

Y b = new Y();

X() {

System.out.print("X");

}

}

 

class Y {

Y() {

System.out.print("Y");

}

}

 

public class Z extends X {

Y y = new Y();

Z() {

System.out.print("Z");

}

 

public static void main(String[] args) {

new Z();

}

}


输出为 YXYZ


0 0