静态初始化块的执行顺序

如果定义初始化块时使用了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();

           }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值