java程序执行顺序_java程序的执行顺序

其实这段代码不难以理解,只需要注意一下几点:静态变量只会初始化一次,在初始化的时候int会被赋值为0

所以也就意味着在这个静态变量只会在第一次加载该类的时候运行。

然后看代码:

注意在main方法中 该类 已经 第一次初始化了,也就是下面这段代码:public static void main(String[] args){

ExeOrder1 e=new ExeOrder1("init"); //注意,第一次初始化在这里。}

随后main方法中类 e 初始化的时候首先会初始化静态变量:如下代码public static int k=0;public static ExeOrder1 e1 = new ExeOrder1("t1");

当执行到第二行的时候会再次加载类,那么此时由于该类已经加载过一次了,所以在初始化 e1 的时候不会再去加载静态变量了,那么e1所能初始化的代码如下:public int j=print("j");

{

print("构造块");

}    public Test1(String str){

System.out.println((++k)+":"+str+"  i="+i+"   n="+n);

++i;

++n;

}

所以你会看到首先打印出来的是:1:j  i=0   n=02:构造块  i=1   n=13:t1  i=2   n=2

当public static ExeOrder1 e1 = new ExeOrder1("t1");这行代码执行完毕,返回并且继续执行main方法里面的类继续初始化。可以称之为 e1 的初始化已经结束,但是 e 还在初始化。

同理执行e2的初始化,e2初始化的时候,所执行的代码如下:public int j=print("j");

{

print("构造块");

}   public Test1(String str){

System.out.println((++k)+":"+str+"  i="+i+"   n="+n);

++i;

++n;

}

所以现在控制台打印的是:1:j  i=0   n=02:构造块  i=1   n=13:t1  i=2   n=24:j  i=3   n=35:构造块  i=4   n=46:t2  i=5   n=5

此时e2 执行完毕。继续返回执行e的初始化,然后依次执行:public static int i = print("i");public static int n=99;static{       //初始的时候静态块优先

print("静态块");

}public int j=print("j");  //然后便是非静态变量{

print("构造块");

}public ExeOrder1(String str){  //最后构造器

System.out.println((++k)+":"+str+"  i="+i+"   n="+n);

++i;

++n;

}

所以最终看到的便是如下结果:

1:j  i=0   n=02:构造块  i=1   n=13:t1  i=2   n=24:j  i=3   n=35:构造块  i=4   n=46:t2  i=5   n=57:i  i=6   n=68:静态块  i=7   n=999:j  i=8   n=10010:构造块  i=9   n=10111:init  i=10   n=102

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值