普通代码块
在方法体中定义的代码块。
public static void main(String[] args) {{int i = 20;System.out.println(i);}System.out.println(i); // 访问不到变量 i}
构造代码块
1.在方法外定义的非静态的代码块
2.先于构造方法执行。实际是先执行父类构造方法,接着执行实例级别的代码块,然后执行当前构造方法
3.每次创建对象时都会执行一次
public class Teacher extends Employee {int num = 10;// 实例级别的代码块{System.out.println("开始构造对象了!");}public Teacher() {
// this(10);
// method();
// System.out.println(num);System.out.println("子类构造器执行!");}
静态代码块
1.属于类级别的代码块
2.类加载进内存时会执行唯一的一次,后面创建对象时不会再执行了
3.常用于对某些静态资源进行初始化
4.静态代码块先于构造代码块执行,而且还要先于父类构造方法执行
什么时候类才会加载进内存中?
答:一次创建对象时
同步代码块
使用 synchronized
关键字加上一个锁对象来定义一段代码,这就叫同步代码块。
代码块的执行顺序
静态代码块 → 父类构造方法 → 构造代码块 → 子类构造方法