- 加载类的时候,静态代码块会被执行一次,且只能执行一次
- 静态内容优先于非静态内容,所以静态代码比构造方法先执行
- 使用场景:用来一次性对静态成员变量进行赋值,或者类资源初始化等操作
静态代码块 > 代码块 > 构造函数
public class test03 {
private static int a;
private int b;
final int age = 10;
{
System.out.println("---初始化块");
f();
System.out.println("---初始化块");
}
test03(){
System.out.println("无参构造方法");
}
test03(int b){
this.b=b;
System.out.println("有参构造方法");
System.out.println(b);
}
static{
System.out.println("--------静态块1");
test03.a=3;
System.out.println(a);
test03 t=new test03();
t.f();
t.b=1000;
System.out.println(t.b);
System.out.println(t.age);
System.out.println("--------静态块1");
}
static{
System.out.println("--------静态块2");
test03.a=4;
System.out.println(a);
System.out.println("--------静态块2");
}
static{
System.out.println("--------静态块3");
test03.a=5;
System.out.println(a);
System.out.println("--------静态块3");
}
public void f(){
System.out.println("hhahhahah");
}
public static void main(String[] args) {
// TODO 自动生成方法存根
System.out.println("--------main方法");
test03 t=new test03(); //创建无参对象
test03 b=new test03(666); //创建有参对象
System.out.println("--------main方法");
}
}
执行结果:
--------静态块1
3
---初始化块
hhahhahah
---初始化块
无参构造方法
hhahhahah
1000
10
--------静态块1
--------静态块2
4
--------静态块2
--------静态块3
5
--------静态块3
--------main方法
---初始化块
hhahhahah
---初始化块
无参构造方法
---初始化块
hhahhahah
---初始化块
有参构造方法
666
--------main方法Process finished with exit code 0
上面代码的执行顺序是:静态块1>静态块2>静态块3>main方法
初始化块和构造方法只要创建对象就会创建。
备注:静态块多个,顺序按代码写的顺序。
参考:static关键字静态代码块和静态方法
https://zhuanlan.zhihu.com/p/165323062



