1、概念分类
使用 { } 定义的一段代码称为代码块,根据代码块定义的位置以及关键字,可分为以下四种
- 普通代码块
- 静态代码块
- 构造代码块
- 同步代码块
2、普通代码块
定义在 方法中 的代码块,这种用法较少见:
3、构造代码块
构造块:定义在类中的代码块(不加修饰符),也叫实例代码块
构造代码块一般用于初始化实例成员变量
构造(实例)代码块只有在创建对象时才会被执行
构造代码块和构造方法的执行先后顺序
4、 静态代码块
使用static定义的代码块称为静态代码块,一般用于初始化静态成员变量
Tips:
- 静态代码块不管生成多少个对象,其只会执行一次
- 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
- 如果一个类种包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
静态代码块、构造(实例)代码块、构造方法,三者之间的执行顺序:
public class Test{
private String name;
private int age;
private static String className = "123";
static{
className = "223";
System.out.println("静态代码块被执行~~~");
}
public Test() {
System.out.println("构造方法被执行");
}
{
this.name = "zhangsan";
this.age = 18;
System.out.println("构造代码块被执行");
}
public static void main(String[] args){
Test test1 = new Test();
System.out.println("=========");
Test test2 = new Test();
}
}
结果:
tips:第二次实例化对象时,静态代码块并没有执行,因为类只会加载一次,该现象涉及到了双亲委派模型(具体请参考文章:待补充~