解释一下static块和static变量的执行顺序

例子:

public class Demo{

          public static int i;

          static{

                i = 20;

                //这里的i, 是可以被用作运算的。

           }

}

这时候如果你在main函数输出i, 那么i=20;

public class Demo{  

          static{

                i = 20;

             //这里的i, 是不能被用作运算的, 因为本质上 i 还未被定义

           }

          public static int i;

}

这时候如果你在main函数输出i, 那么i=20;

 public class Demo{  

          static{

                i = 20;

             //这里的i, 是不能被用作运算的, 因为本质上 i 还未被定义

           }

          public static int i = 1;

}

这时候如果你在main函数输出i, 那么i=1;

结论:变量名首先被加载,而赋值的时候,无论是直接在变量上赋值还是在静态代码块中赋值,都是按照代码的顺序赋值的。