Java类中的初始化顺序

1. 下面详细介绍了类中变量的初始化顺序
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
31
32
public class Test {                        // 1.第一步,准备加载类

static int num = 4; // 2.第二步,静态变量和静态代码块的加载顺序由编写先后决定

static { // 3.第三步,静态块,然后执行静态代码块,因为有输出,故打印a
System.out.println("a");
}

public static void main(String[] args) {
new Test(); // 4.第四步,new一个类,但在new之前要处理匿名代码块
}

int a = 4; // 5.第五步,按照顺序加载变量和执行匿名代码块

{
System.out.println("b"); // 6.第六步,按照顺序加载匿名代码块,代码块中有打印
}

int b = 5; // 7.第七步,按照顺序加载变量

{
System.out.println("c"); // 8.第八步,按照顺序打印c
}

Test() {
System.out.println("d"); // 9.第久步,最后加载构造函数,完成对象的建立
}

static void run() { // 静态方法,调用的时候才加载// 注意看,e没有加载
System.out.println("e");
}
}
2. 一个简单的小测试
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
31
32
33
34
35
36
37
38
public class TestAB {
public static void main(String[] args) {
// 142356
B b = new B();
}
}

class A {
static int a = 4;

static {
System.out.print(1);
}

{
System.out.print("2");
}

public A() {
System.out.print(3);
}
}

class B extends A {
static int a = 5;

static {
System.out.print(4);
}

{
System.out.print("5");
}

public B() {
System.out.print(6);
}
}