- 代码块
- 构造代码块
- 静态代码块
- 同步代码块
- 代码块执行顺序
- Background
- Example 1: 只有一个类的情况(无继承)
- Example 2: 在有继承的情况下
- Example 3
- Example 4
构造代码块
- 在Java中,使用{}大括号括起来的代码被称为代码块,代码块可以在类的任何地方出现,具体分为: 普通代码块,构造代码块,静态代码块,同步代码块
静态代码块
- 定义: 在类中用{ }括起来的代码,没有任何的修饰符,参数列表,返回值等
- 执行顺序:在对象被创造时执行,在构造函数之前执行
- 构造函数的作用:如果只有一个构造方法,那么构造代码块写在构造方法里也可以,但如果有多个构造方法需要做一部分公共的处理,那么这部分公共的代码可以提取出来放在构造代码块中,这样就可以只写一次,避免代码重复。以及内部匿名类的初始化
同步代码块
- 定义: 在类中用 static{}括起来的代码,可以在类中任何地方出现
- 执行顺序:在类被加载时执行(不是在对象被创造时执行),并且在main函数之前执行
- 静态代码的作用:用于类的初始化以及提升程序性能,只在类被加载时执行一次
Ex:包装类的缓存用到了静态代码块
代码块执行顺序 Background
- 定义:使用synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性。同步代码块需要写在方法中
Example 1: 只有一个类的情况(无继承)
- 创造对象时先加载成员数据然后加载构造代码块然后是构造函数(也是找到父类,然后从父类开始加载构造代码块和构造函数)
- 注意Example3和4
Example 2: 在有继承的情况下
- 静态代码块 -> Main函数 -> 构造代码块 -> 构造函数
Example 3
- 父类静态代码块 -> 子类静态代码块 -> Main函数 -> 父类构造代码块 -> 父类构造函数 ->子类构造代码块 -> 子类构造函数



