java构造器初始化先后顺序:
若此类继承于某基类,则先初始化基类,以此类推,找到最基本的父类,先对基类进行初始化。
从基类开始依次对类中的static字段进行初始化,
然后再依次从基类开始对构造方法进行初始化,但是在对构造方法进行初始化的时候,为了保证能够正确的初始化则先要对类中的字段域进行按照代码的先后顺序进行初始化。
a)首先对于类中的基本类型则都会被设置为默认值(若没有赋值则设为null或0)
b)其次然后在进行构造函数的初始化
代码示例
Insect.java类:
class Insect
{
private int i = 9;
protected int j;
Insect()
{
print("I = " + i + "j = " + j);
j = 29;
}
private static int x1 = printInit("Insect.static x1 init.");
static int printInit(String s)
{
print(s);
return 47;
}
}
Beetle.java 集成Insect.java
public class Beetle extends Insect
{
private k = printInit("Beetle.k initialized");
public Beetle()
{
print("k = " + k);
print("j = " + j);
}
private static int x2 = printInit("Beetle.static x2 init.");
public static void main(String[] args)
{
print("Beetle constructor.");
Beetle b = new Beetle();
}
}
输出结果:
Insect.static x1 init.
Beetle.static x2 init.
I = 9 j = 0
Beetle.k initialized
k = 47
j = 29