java静态初始化的执行顺序

java静态初始化的执行顺序

//啥话不说,先上代码
public class Demo2 { 

    public static int k = 0; 

    public static Demo2 t1 = new Demo2("t1"); 

    public static Demo2 t2 = new Demo2("t2"); 

    public static int i = print("i"); 

    public static int j = print("j"); 

    public static int n = 99; 

   //    下面的代码属于构造代码块

    { 

        print("constructor code"); 

    } 

     //    下面的代码属于静态代码块

    static { 

        print("static code"); 

    } 

    public static int print(String s) { 

        System.out.println("i="+i +" "+s+ " k=" + k + " n=" + n + " j=" + j); 

        ++i; ++k; ++n; return i; 

    } 

    public Demo2(String string) { 

        print(string); 

    } 
    public static void main(String[] args) { 

        Demo2 d=new Demo2("T"); 

    } 


} 

/执行结果如下
i=0 constructor code k=0 n=0 j=0
i=1 t1 k=1 n=1 j=0
i=2 constructor code k=2 n=2 j=0
i=3 t2 k=3 n=3 j=0
i=4 i k=4 n=4 j=0
i=5 j k=5 n=5 j=0
i=6 static code k=6 n=99 j=6
i=7 constructor code k=7 n=100 j=6
i=8 T k=8 n=101 j=6

执行步骤:从上到下依次初始化每个static修饰的语句或者静态代码块,最后再执行main方法

  • 执行public static int k = 0;
  • 执行public static Demo2 t1 = new Demo2(“t1”);
    • 对象初始化要先执行非静态代码块print(“constructor code”);
    • 再找到 print(String s) 方法,打印i=0 constructor code k=0 n=0 j=0
  • 执行构造方法中的 print(t1) 方法,打印i=1 t1 k=1 n=1 j=0
  • 执行public static Demo2 t2 = new Demo2(“t2”); 打印
    i=2 constructor code k=2 n=2 j=0
    i=3 t2 k=3 n=3 j=0
  • 执行public static int i = print(“i”); public static int j = print(“j”);
    打印i=4 i k=4 n=4 j=0
    i=5 j k=5 n=5 j=0
  • 执行 public static int n = 99;
  • 执行static {print(“static code”);}
    打印i=6 static code k=6 n=99 j=6
  • main函数调用 new Demo2(”T”) 打印
    i=7 constructor code k=7 n=100 j=6
    i=8 T k=8 n=101 j=6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值