java 类的加载顺序

  1. 首先是静态成员变量和静态代码快的初始化(在类文件书写的顺序初始化)
  2. 成员变量和代码快的初始化(在类文件书写的顺序初始化)
  3. 构造方法的执行
  • 如果有父类的话会首先加载父类

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

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

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

运行结果

main 静态代码快(1)
ClassFather静态代码块(2)
Subclass 静态代码快 (3)
ClassFather代码块 (4)
ClassFather构造方法(5)
Subclass 代码快(6)
Subclass 构造方法 (7)
Hello World!
1
2
3
4
5
6
7
8