静态代码块详细

 众所周知 在android中static 修饰的会被称之为 静态常量,静态变量, 静态方法 ,还有就是静态代码块,用static{ // 代码块 非static修饰的方法,变量,常量, 是不能再静态代码块中使用的 } 表示。

       static修饰的 是跟着类走的, 而不是跟随对象,这个大家都是知道的。 那么大家是否知道它们之间的运行顺序的关系呢? 今天, 我就给大家简单讲解一下吧。

       静态常量,静态变量,静态方法, 大家都知道是通过类名直接调用的(例如:Demo.getStatic() )。但是静态代码块 大家都没有主动调用过 对吧。 那它 到底什么时候被执行呢? 让我来揭晓吧, 其实只要你的代码在任意地方,动用了静态代码块所属的类中的 任意东西, 那么该静态代码块 就会马上执行(说白了就是  静态代码块是这个类最先执行的代码, 但前提是你要使用这个类, 不使用的话, 这个类中的静态代码块是不会执行的 与静态变量相比就是看代码编写的前后顺序,和静态方法有很大的区别)。 当一个类中 有多个静态代码块的时候,是按照代码编写的上下顺序先后执行的。

      静态代码块 与 静态变量之间的关系:

如果你想正确使用两者的话, 个人建议  你必须把静态变量定义在静态代码块的前面, 因为两个的执行是会根据代码编写的顺序来决定的。这个比较难理解, 我来举个例子吧, 情况下面代码:

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;

}

//但是如果我们给静态的i附上一个初始值后,那么结果就变了。

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

上述的代码 就其实就是进一步说明 静态变量 和static修改的静态代码块 运行的顺序是根据代码编写的先后, 而且第二种写法毫无意义。 未了避免出现不必要的麻烦, 本人强制建议, 不管是否有在静态代码块中使用 静态变量, 都应当把静态变量写在 静态代码块的上方。 静态常量的情况 和静态变量是一样, 这里就不在做说明了。

原文地址:https://www.cnblogs.com/macwhirr/p/8116648.html