Java static和new对象的执行顺序

ParentTon

public class Parent {
	
	public static final int P_A = 0;
	public static int P_B=0;
	public static int P_C;
	
	private static SingleChild obj = new SingleChild();
	
	Parent(){
		System.out.println("Parent_Constructor--level--3");
		P_B++;
		P_C++;
	}
	{
		System.out.println("Parent Code block--level--2");
	}
	static {
		System.out.println("Parent Static block--level--1");
	}
}

SingleChild 

public class SingleChild extends Parent{
    private static SingleChild obj = new SingleChild();
    public static int C_A;
    public static int C_B = 0;

    {
    	System.out.println("Child code block --level--4");
    }
    
    static {
    	System.out.println("Child static block --level--6");
    }
    
    public SingleChild() {
    	System.out.println("Child_Constructor--level--5");
        System.out.println(C_A); // 0
        System.out.println(C_B); // 0
        C_A++;
        C_B++;
    }

    public static SingleChild getInstance() {
        return obj;
    }
}

Test

public class TestClassExcuteChian {

    public static void main(String[] args) {
        System.out.println("C_A="+SingleChild.C_A);
        System.out.println("C_B="+SingleChild.C_B);
        SingleChild obj1 = SingleChild.getInstance();
        SingleChild obj2 = new SingleChild();    
        System.out.println("P_A="+SingleChild.P_A);
        System.out.println("P_B="+SingleChild.P_B);
        System.out.println("P_C="+SingleChild.P_C);
    }
}

Test result

Parent Code block--level--2

Parent_Constructor--level--3

Child code block --level--4

Child_Constructor--level--5

0

0

Parent Static block--level--1

Parent Code block--level--2

Parent_Constructor--level--3

Child code block --level--4

Child_Constructor--level--5

1

1

Child static block --level--6

C_A=2

C_B=0

Parent Code block--level--2

Parent_Constructor--level--3

Child code block --level--4

Child_Constructor--level--5

2

0

P_A=0

P_B=3

P_C=3

总结

父类的静态块 --   1, 如果在静态new A(),代码块和构造方法 ,不执行static部分

父类的代码块 --   2,new A(),同样会执行代码块,级别高于构造方法

父类的构造方法--3,new A() 和初始化时,都会执行

子类的静态块 --  4,

子类的代码块--   5

子类的构造方法--6

所有的静态初始化,和new(),会分别放到两个堆栈中执行,各自按照顺序执行。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值