public class Test1 { static int cnt = 6; static { cnt += 9; } public static void main(String[] args) { System.out.println("cnt =" + cnt); } static { cnt /= 3; } }
public class Test{ static{ cnt = 6; } static int cnt = 100; public static void main(String[] args){ System.out.println("cnt = " + cnt); //最后输出是50,如果按照错误说法就应该是3 //按顺序执行就是cnt=6--->cnt=100---->cnt = 100/2 = 50. } static{ cnt /= 2; } }
jvm 调用main 方法之前顺序应该是静态变量和静态代码块同级(谁写在前面写先执行),但是静态变量会先分配一个存储空间 public class Jt {
static { s ="120"; }
static String s = "00";
public static void main(String[] args)
{ System.err.println(s); }
}
这里输出的是00 因为先给s分配了存储空间,然后再顺序执行s=120 s=00.所以编译不会报错。