在Java中使用{}括起来的代码称为代码块
根据其位置和声明的不同,可以分为
-
局部代码块:局部位置,用于限定变量的生命周期
-
构造代码块:在类中方法外,每次调用构造方法前都会先执行构造代码块,可以把多个构造方法中的相同代码放到一起
-
静态代码块:在类中方法外,用static修饰{}
一般是对类进行初始化,随着类的加载而加载
-
同步代码块:在类中方法外,用synchronized修饰
一般是用于对多线程的同步
代码块的执行顺序
静态代码块->构造代码块->构造方法->局部代码块
静态代码块只执行一次,不管调用多少次对象
构造代码块每次调用构造方法都执行
class Fu{//加载父类文件就要加载静态代码块
static{
System.out.println("静态代码块Fu");
}
//所以要执行父类的构造方法先执行父类的构造代码块
{
System.out.println("构造代码块Fu");
}
public Fu(){
System.out.println("构造方法Fu");
}
}
class Zi extends Fu{//继承了父类,先加载父类再加载子类
static{
System.out.println("静态代码块Zi");//再回来加载子类的静态代码块,需要注意,静态代码块的执行是随着类的加载而加载
//只有协同关系,不存在执行关系
}
{//执行完父类的构造代码块和构造方法在返回来执行子类的构造代码块和构造方法
System.out.println("构造代码块Zi");
}
public Zi(){//调用子类的构造方法前先调用父类的构造方法
System.out.println("构造方法Zi");
}
}
public class Ceshi {
public static void main(String[] args){
Zi zi=new Zi();//创建子类对象 Zi zi就在加载父子.class new Zi()在调用构造函数
}
}
结果:
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi