普通代码块
在方法体中定义的代码块。
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
关键字加上一个锁对象来定义一段代码,这就叫同步代码块。
静态代码块 → 父类构造方法 → 构造代码块 → 子类构造方法