# java 类的加载顺序
- 首先是静态成员变量和静态代码快的初始化(在类文件书写的顺序初始化)
- 成员变量和代码快的初始化(在类文件书写的顺序初始化)
- 构造方法的执行
- 如果有父类的话会首先加载父类
# Main
public class Main {
static {
System.out.println("main 静态代码快(1)");
}
{
System.out.println("main代码块");
}
public static void main(String[] args) {
Subclass subclass = new Subclass();
System.out.println("Hello World!");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# ClassFather
public class ClassFather {
public static String name;
static {
System.out.println("ClassFather静态代码块(2)");
}
{
System.out.println("ClassFather代码块 (4)");
}
ClassFather() {
System.out.println("ClassFather构造方法(5)");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Subclass
public class Subclass extends ClassFather {
public String name;
static {
System.out.println("Subclass 静态代码快 (3)");
}
{
System.out.println("Subclass 代码快(6)");
}
Subclass() {
// super();
System.out.println("Subclass 构造方法 (7)");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 运行结果
main 静态代码快(1)
ClassFather静态代码块(2)
Subclass 静态代码快 (3)
ClassFather代码块 (4)
ClassFather构造方法(5)
Subclass 代码快(6)
Subclass 构造方法 (7)
Hello World!
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8