Gangmax Blog

[转贴]关于Java中的构造方法

Migarated from here at ‘2012-05-22 17:35:03’.

在创建对象时,对象所在类的所有数据成员会首先进行初始化,如果其中的成员变量有对象,那么它们也会按照顺序执行初始化工作。在所有类成员初始化完成后,才调用对象所在类的构造方法创建对象。构造方法作用就是初始化。

静态对象(变量)在非静态对象前初始化。静态对象(变量)只初始化一次,再次调用就不初始化了,但非静态对象在每次调用时都要初始化。

程序中的主类的静态变量会在main()方法执行前进行初始化工作。

不仅第1次创建对象时,类中所有的静态变量要初始化,第1次访问类中的静态变量(没有创建对象)时,该类中所有的静态变量也要按照它们在类中排列的顺序初始化。

初始化的顺序包括构造方法调用的顺序如下:

1. 主类的静态成员首先初始化。

2. 主类的超类的构造方法按照从最高到最低的顺序被调用。

3. 主类的非静态对象(变量)初始化。

4. 调用主类的构造方法。

在一个构造方法中只能调用一次其它的构造方法,并且调用构造方法的语句必须是第一条语句。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class One
{
public One(String str)
{
System.out.println(str);
}
}

class Two
{
One one_1 = new One("one-1");
One one_2 = new One("one-2");
static One one_3 = new One("one-3");
public Two(String str)
{
System.out.println(str);
}
}

public class Test
{
static Two two_3 = new Two("two-3");
public static void main(String[] args)
{
System.out.println("Test main() start...");
Two two_1 = new Two("two-1");
System.out.println("------------");
Two two_2 = new Two("two-2");
}
}

one-3
one-1
one-2
two-3
Test main() start…
one-1
one-2
two-1

one-1
one-2
two-2

Comments