Java子父类中静态代码块,构造代码块,构造方法,及成员变量的默认初始化和显示初始化的执行先后顺序。

时间:2021-12-11 15:42:15

代码块:

        1.静态代码块的作用:初始化静态变量。

        2.构造代码块的作用:初始化构造方法。

        3.局部代码块的作用:限定局部变量的生命周期。

代码:

public class Test {
	public static void main(String[] args) {
		Fu f = new Zi();
		f.show();
	}
}

class Fu {
	static {
		System.out.println("Fu 静态代码块 run");
	}
	
	public Fu() {
		System.out.println("Fu 无参构造 run");
		this.show();
	}
	
	{
		System.out.println("Fu 构造代码块 run");
	}
	
	public void show() {
		System.out.println("Fu show run");
	}
}

class Zi extends Fu {
	public int i = 5;

	static {
		System.out.println("Zi 静态代码块 run");
	}
	
	public Zi() {
		super();
		System.out.println("Zi 无参构造 run");
	}
	
	{
		System.out.println("Zi 构造代码块 run");
	}
	
	public void show() {
		System.out.println("Zi show run i=" + i);
	}
}

运行结果:

        Java子父类中静态代码块,构造代码块,构造方法,及成员变量的默认初始化和显示初始化的执行先后顺序。

总结:

        先执行父类的静态代码块,再执行子类的静态代码块,当new子类对象的时候,会先对自己的成员变量进行默认初始化(int类型为0,double类型为0.0,引用类型为null),再执行父类的构造代码块,然后调用父类的无参构造,接着对自己的成员变量进行显示初始化(int i = 5),然后执行自己的构造代码块,最后执行自己的无参构造super()之后的内容。