详解代码执行顺序JAVA

public class InitializeDemo {

        private static Integer k = 1;
        private static InitializeDemo t1 = new InitializeDemo("t1");
        private static InitializeDemo t2 = new InitializeDemo("t2");
        private static int i = print("i");
        private static int n = 99;

        {
            print("初始化块");
            j=100;
        }
        public InitializeDemo(String str) {
            System.out. println((k++)+":" + str + " i=" + i + " n=" +n);++i;
            ++n;
        }
        static {
            print( "静态块");
            n=100;
        }

        private int j = print( "j");
        public static int print(String str) {
            System.out.println((k++) + ":" + str + " i=" + i + " n=" + n);
            ++n;
            return ++i;
        }
        public static void main(String[] args){
            InitializeDemo test = new InitializeDemo("test");

        }


}

运行结果

 1、首先main方法入栈

然后从上往下执行顺讯

两个阶段:首先将所有的静态的域赋值(0 或null或false)执行完后

K=0 ; t1,t2 都为null; i=0; n=0;

然后到了静态代码块

此时他不执行

然后进行第二遍执行

对静态的初始化语句 和初始化块

k=1;

碰到了静态初始化语句 new 

一旦碰到new  就从上往下找找非静态的初始化语句

然后就碰到了

此时执行代码块内的内容

执行 print 方法

 

k已经赋值为1所以 打印出 1 并将k修改为2 ,所以为第一行输出

 

然后接着找非静态语句

 然后打印,就是第二行

 然后没有静态代码块,开始执行构造函数

 得到第三行打印

 然后 new 出来的t1已经执行完毕,进行new t2 所以一样的过程

t2 new 完以后

向下执行 遇到 

 

 接着打印

 在向下将n赋值为99

再到静态代码块 此时执行  并将 n 赋值为100

 

打印第8航

对象身被加载完,接下来是new对象

 所以 初始化块又被执行

 然后及时 打印 j

再接着构造方法

代码执行完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值