Java初始化可以在不同代码块完成,执行顺序?

在这里插入图片描述
1.初始化父类中的静态成员变量和静态代码块 ;
2. 初始化子类中的静态成员变量和静态代码块 ;
3.初始化父类的普通成员变量和代码块,再执行父类的构造方法;
4.初始化子类的普通成员变量和代码块,再执行子类的构造方法;

package cn.itcast.demo;

public class X {
	Y y = new Y();
	public X(){
		System.out.println("X");
	}
}

package cn.itcast.demo;

public class Y {
	public Y(){
		System.out.println("Y");
	}
}

package cn.itcast.demo;

public class Z extends X {
	Y y = new Y();
	public Z(){
		System.out.println("Z");		
	}
	public static void main(String[] args) {
		new Z();
	}
}

在这里插入图片描述
(1)初始化父类的普通成员变量和代码块,执行 Y y=new Y(); 输出Y
(2)再执行父类的构造方法;输出X
(3) 初始化子类的普通成员变量和代码块,执行 Y y=new Y(); 输出Y
(4)再执行子类的构造方法;输出Z
所以输出YXYZ

猜你喜欢

转载自blog.csdn.net/weixin_40807247/article/details/87972281