您的位置:首页 > 编程语言 > Java开发

java中构建器的初始化顺序

2012-05-14 17:58 309 查看
初始化顺序首先是static(第一次初始化),其次是非static对象。

在对象建立的时候,对所有类static变量从上往下一次初始化,只发生一次。

其次是构建器初始化。

在new 对象()的时候,类中的所有变量都会被初始化

例子

class Cup {

Cup(int marker) {

System.out.println("Cup(" + marker + ")");

}

void f(int marker) {

System.out.println("f(" + marker + ")");

}

}

class Cups {

static Cup c1;

static Cup c2;

static {

c1 = new Cup(1);

c2 = new Cup(2);

}

Cups() {

System.out.println("Cups()");

}

}

public class ExplicitStatic {

public static void main(String[] args) {

System.out.println("Inside main()");

Cups.c1.f(99); // (1)

}

static Cups x = new Cups(); // (2)

static Cups y = new Cups(); // (2)

//Cups c = new Cups();(3)

} ///:~

输出

Cup(1)

Cup(2)

Cups()

Cups()

Inside main()

f(99)

若去掉(3的注释),也不会调用Cups c =new Cups();因为不是静态变量,也没有调用ExplicitStatic();

如果有extends

装载的时候会先去找父类,并载入,如果父类还有父类,会继续向上寻找父类,然后有上向下一个个载入,先static变量,再非static变量

所有必要类装载完毕后,会初始化所有成员变量,由父类开始先初始化成员变量,再构造器,再子类成员变量,构造器。

class Insect {

int i = 9;

int j;

Insect() {

prt("i = " + i + ", j = " + j);

j = 39;

}

static int x1 =

prt("static Insect.x1 initialized");

static int prt(String s) {

System.out.println(s);

return 47;

}

}

public class Beetle extends Insect {

int k = prt("Beetle.k initialized");

Beetle() {

prt("k = " + k);

prt("j = " + j);

}

static int x2 =

prt("static Beetle.x2 initialized");

static int prt(String s) {

System.out.println(s);

return 63;

}

public static void main(String[] args) {

prt("Beetle constructor");

Beetle b = new Beetle();

}

}

输出

static Insect.x initialized

static Beetle.x initialized

Beetle constructor

i = 9, j = 0

Beetle.k initialized

k = 63

j = 39
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: