java 中父子类的静态代码块、代码块、构造方法的加载执行顺序

文章目录

      • 1 新建两个父子类
      • 2 新建测试类
        • 2.1 只加载父类时
        • 2.2 只加载子类时
        • 2.3 创建父类的实例时
        • 2. 4 创建子类的实例时

1 新建两个父子类

  1. Father.java
package t1;

public class Father {

	{
		System.out.println("父类的代码块");
	}

	static{
		System.out.println("父类的静态代码块");
	}

	public Father() {
		System.out.println("父类的构造方法");
	}

}
  1. Son.java
public class Son extends Father {

	{
		System.out.println("子类的代码块");
	}

	static{
		System.out.println("子类的静态代码块");
	}

	public Son() {
		System.out.println("子类的构造方法");
	}
}

2 新建测试类

2.1 只加载父类时

测试代码
public class Test {
	public static void main(String[] args) throws ClassNotFoundException {
		Class.forName("t1.Son");
	}
}
控制台输出
父类的静态代码块

只加载父类时,父类的静态代码块执行

2.2 只加载子类时

测试代码
public class Test {
	public static void main(String[] args) throws ClassNotFoundException {
		Class.forName("t1.Son");
	}
}
控制台输出
父类的静态代码块
子类的静态代码块

只加载子类时,父类的静态代码块先执行,子类的静态代码块后执行

2.3 创建父类的实例时

测试代码
public class Test {
	public static void main(String[] args) throws ClassNotFoundException {
		new Father();
		System.out.println("========");
		new Father();
	}
}
控制台输出
父类的静态代码块
父类的代码块
父类的构造方法
========
父类的代码块
父类的构造方法

创建父类的实例时,父类的静态代码块先执行,其次为代码块,构造方法(只要创建实例,代码块和构造方法都要执行,静态代码块只执行一次)

2. 4 创建子类的实例时

测试代码
public class Test {
	public static void main(String[] args) throws ClassNotFoundException {
		new Son();
		System.out.println("========");
		new Son();
	}
}
控制台输出
父类的静态代码块
子类的静态代码块
父类的代码块
父类的构造方法
子类的代码块
子类的构造方法
========
父类的代码块
父类的构造方法
子类的代码块
子类的构造方法

执行顺序

  1. 父类的静态代码块
  2. 子类的静态代码块
  3. 父类的代码块
  4. 父类的构造方法
  5. 子类的代码块
  6. 子类的构造方法

只要创建子类的实例,都会优先执行父类的代码块和构造方法,然后再执行子类的代码块和构造方法(静态代码块只在类加载的时候执行一次)

你可能感兴趣的:(Java基础知识)