静态初始化块的执行顺序

来源:互联网 发布:舒畅和刘亦菲关系知乎 编辑:程序博客网 时间:2024/06/05 17:26

如果定义初始化块时使用了static修饰符,则变成了静态初始化块。静态初始化块时类相关的,系统将在类初始化阶段执行静态初始化块,而不是在创建对象时才执行。

因此静态初始化块总是比普通初始化块先执行。

 

与普通初始化块类似的是,系统在类初始化阶段执行静态初始化块时,不仅会执行本类的静态初始化块,而且还会一直上溯到java.lang.Object类,先执行java.lang.Object类中的静态初始化块,然后执行其父类的静态初始化块,最后才执行该类的静态初始化块。经过这个过程,才完成了该类的初始化过程。只有当类初始化完成后,才可以在系统中使用这个类,包括访问类method、类Field,或者用这个类来创建实例。

 

示例:class Method1

  {

        static {

                  System.out.println("Method1静态初始化块");  

        }

     

        {

                 System.out.println("Method1普通初始化块");  

         }

 

         public Method1(){

                 System.out.println(" Method1无参的构造器");  

         }

  }

 

class Mid extends Method1

{

           static {

                  System.out.println("Mid静态初始化块");  

        }

     

        {

                 System.out.println("Mid普通初始化块");  

         }

 

         public Mid(){

                 System.out.println("Mid无参的构造器");  

         }

       public Mid(String msg)

        {

                this();

                System.out.println("Mid的带参构造器,其参数值为:"+msg);

        }

}

 

public class Method2 extends Mid

{

           static {

                  System.out.println("Method2静态初始化块");  

        }

     

        {

                 System.out.println("Method2普通初始化块");  

         }

 

         public Method2(){

                super(”方法2的无参构造器");

                 System.out.println(" Method2无参的构造器");  

         }

 

}

 

public class Test

{

       public static void main(String [] args)

          {

                 new Method2();

           }

}

原创粉丝点击