《编写高质量代码 改善java程序的151个建议》
public class ClientA { static { i = 100; } public static int i =1; public static void main(String[] args) { System.out.println(i); } }
------------------------------------
结果为1
-------------------------------------
public class ClientA { public static int i =1; static { i = 100; } public static void main(String[] args) { System.out.println(i); } }
------------------------------
结果100
JVM 先声明空间,然后再赋值的
int i = 100
再JVM中是分开执行的,等价于
int i ; //分配空间
i = 100 //赋值
静态变量是在类初始化时首先加载的,JVM会去查找类中所有的静态声明,然后分配空间,这是还没有赋值,只是进行了地址空间的分配,
之后JVM会根据类中的静态赋值(包括静态类赋值和静态块赋值)的先后顺序来执行。