1. java将多个静态初始化动作,组织成一个特殊的“静态子句”,就是静态块。
2. 静态块中的初始化代码会一并执行。
public class StaticBolck1 { // 静态块 static { StaticBolck1 a = new StaticBolck1(); i = 10; } public static int i; public int j; public StaticBolck1() { System.out.println("==1111=="); System.out.println(StaticBolck1.i); System.out.println("==2222=="); System.out.println(j); System.out.println("===end===="); } public static void main(String[] args) { StaticBolck1 a = new StaticBolck1(); } }
输出:
==1111==
0
==2222==
0
===end====
==1111==
10
==2222==
0
===end==
说明:
static模块在类加载中首先会被加载且只会被加载一次,构造函数则可以多次加载。
加载顺序为:static模块、构造方法。
主方法(程序入口)main方法中,new A(); 所以会去加载static{}。
在static中又一次new A,所以会调用其构造方法public A() {},
此时打印出来的内容是 i=0 j=0,二者都是初始化的值。
static模块加载之后,会去加载其构造方法。
此时i在static中赋值为10,j不变,所以在构造方法的第二次调用中打印的是i=10 j=0。
另外,java中还有一种用法叫“非静态块”,其功能和初始化顺序和“静态块”是一样的。
唯一的不同就是“非静态块”不是静态的,没有static关键字。