Java编程思想学习笔记(一)—— 初始化

一般来说, Java 中对象的初始化顺序是先初始化静态成员变量, 再初始化非静态成员变量, 最后调用构造方法, 需要注意的是静态成员变量只会在该类第一次初始化一个对象的时候进行初始化, 之后. 初始化对象时将不再进行静态成员变量的初始化。

以以下代码为例

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
class A {
public A(int i) {
System.out.println("A" + i);
}
}
class B {
static A a1 = new A(1);
public B(int i) {
System.out.println("B" + i);
}
static B b1 = new B(1);
}
class C {
static B b2 = new B(2);
B b3 = new B(3);
public C(int i) {
System.out.println("C" + i);
}
}
public class InitTest {
static C c1 = new C(1);
public static void main(String[] args) {
C c2 = new C(2);
}
}

最后在控制台输出的结果是

1
2
3
4
5
6
7
A1
B1
B2
B3
C1
B3
C2

由输出结果可以看出:

  1. 当执行程序时, 首先是先进行 c1 的初始化, 再进行 c2 的初始化。
  2. 在进行 c1 初始化时, 首先进行 b2 的初始化, 再进行 b3 的初始化, 最后才会执行构造方法。
  3. 在进行 b2 初始化时, 同样的先进行 a1 的初始化, 再进行 b1 的初始化, 最后执行构造方法
  4. 由于 a1, b1, b2 是静态成员变量, 所以只会进行一次初始化, 在 c2 初始化时便不再执行相应的初始化方法
  5. 由于b3是非静态成员变量, 所以 c1 和 c2 初始化时都会初始化 b3