代码块的执行顺序

深入学习Java基础知识
2021-05-17 14:29 · 阅读时长3分钟
小课

在Java中会经常用到静态代码块和构造方法,但是还有一种代码块叫构造代码块,用的比较少,但是在面试时会因为代码块执行顺序而提到。

静态代码块,只在类加载时执行一次,多个静态代码块执行顺序取决于它在代码中的位置,先定义的先执行,最常用的场景就是加载native库

static {
    System.loadLibrary("zhixing");
}

构造代码块,每次创建实例时都会执行,多个构造代码块执行顺序也取决于它在代码中的位置,先定义的先执行,它和构造方法执行时机不同的是,如果有多个构造方法,创建实例时只会调用其中一个构造方法,而构造代码块始终都会调用。不过我们可以在构造方法里面调用另外一个构造方法,或者调用统一的初始化方法,来实现构造代码块的功能,而且更加直观。

首先明确一点,静态代码块是在类加载时执行的,而构造方法和构造代码块是在创建实例时才执行,所以静态代码块肯定比后两者先执行,下面看看示例。

1class Course {
2
3    static {
4        System.out.println("静态代码块");
5    }
6
7    public Course() {
8        System.out.println("构造方法1");
9    }
10
11    public Course(int test) {
12        System.out.println("构造方法2");
13    }
14
15    {
16        System.out.println("构造代码块");
17    }
18}
19
20public class Main {
21
22    public static void main(String[] args) {
23        Course course = new Course();
24        System.out.println("========");
25        course = new Course(1);
26    }
27}
注意: 这个Java运行环境不支持自定义包名,并且public class name必须是Main
1class BaseModel {
2    static {
3        System.out.println("BaseModel静态代码块");
4    }
5
6    public BaseModel() {
7        System.out.println("BaseModel构造方法");
8    }
9
10    {
11        System.out.println("BaseModel构造代码块");
12    }
13}
14
15class Course extends BaseModel {
16
17    static {
18        System.out.println("Course静态代码块");
19    }
20
21    public Course() {
22        System.out.println("Course构造方法");
23    }
24
25    {
26        System.out.println("Course构造代码块");
27    }
28}
29
30public class Main {
31
32    public static void main(String[] args) {
33        Course course = new Course();
34    }
35}
注意: 这个Java运行环境不支持自定义包名,并且public class name必须是Main
java code block