JAVA对象的初始化过程

java

出处:http://blog.csdn.net/andrew323/article/details/4665379

下面我们通过两个例题来说明对象的实例化过程。

例1:
 

 

编译并运行该程序会有以下输出
Static Block

Employee Company:china soft

Non-Static Block

Employee phone:0755-51595599

Employee(String)

Empoloyee()


下面我们来对结果做分析:

1 在代码34行实例化对象时, 先对给静态变量分配内存空间并初始化,然后执行静态块。

因此,在这里会输出:
Static Block

Employee Company:china soft


Employee Company:china soft的输出也说明是先初始化静态变量然后再执行静态块,否则company将为null。

2然后在内存中为Employee分配内存空间,并做默认初始化(即所有变量初始化为默认值,这里都初始化为null)。

3 默认初始化完成后,开始显示初始化。即执行第5行,将phone初始化"0755-51595599",并且执行非静态方法块;因此在这里会有以下输出:
Non-Static Block

Employee phone:0755-51595599


4 最后才调用默认构造函数,在默认构造函数中调用了带参数的构造函数,所以在这里先输出带参数构造函数中的:Employee(String),然后才输出:Empoloyee()。


例2:

 

 上面的代码中Manager继承了前面写的Employee类,当我们编译并运行Manager类,会产生以下的输出:

Static Block

Employee Company:china soft

Sub Static Block

Manager department:sale

Non-Static Block

Employee phone:0755-51595599

Employee(String)

Empoloyee()

Sub Non-Static Block

Manager salary:8000

Manager(String)

Manager()


下面我们对结果做分析:

1 在行34实例化对象时,由于Manager继承了Employee,所以先从父类Employee开始;先给父类静态变量分配内存空间并初始化,然后执行父类静态块。然后再给子类静态变量分配内存空间并初始化,然后执行子类静态块,所以会得到以下输出:

Static Block

Employee Company:china soft

Sub Static Block

Manager department:sale

2然后在内存中为父类Employee分配内存空间,并做默认初始化;再为子类Manager分配内存空间,并做默认初始化。

3默认初始化完成后,从父类开始显示初始化并执行非静态方法块和构造函数,然后再子类开始显示初始化并执行非静态方法块和构造函数。因此会产生以下的输出:
Employee phone:0755-51595599

Employee(String)

Empoloyee()

Sub Non-Static Block

Manager salary:8000

Manager(String)

Manager()

总结以上内容,可以得到对象初始化过程:

1 如果存在继承关系,就先父类后子类;

2 如果在类内有静态变量和静态块,就先静态后非静态,最后才是构造函数;

3 继承关系中,必须要父类初始化完成后,才初始化子类。

以上是 JAVA对象的初始化过程 的全部内容, 来源链接: utcz.com/z/393339.html

回到顶部