Java中,子类继承父类,子类创建对象时,执行顺序如下:
①父类静态代码块>>②子类静态代码块>>③父类非静态代码块>>④父类构造函数>>⑤子类非静态代码块>>⑥子类构造函数
总结:
父类早于子类,静态早于非静态,非静态早于构造函数,父类非静态和构造函数早于子类的非静态和构造函数。
1、验证代码
package com.example.demo.utils;
/**
* Java创建对象时执行顺序
*
* @Author HL
* @Date 2021年3月20日
*/
public class InitClass {
/**
* 父类
*/
static class Parent {
// 父类构造方法
public Parent() {
System.out.println("父类构造方法。。。");
}
// 静态变量初始化
static String staticWord = "Static Hello";
// 静态代码块
static {
System.out.println("父类静态代码块, staticWord = " + staticWord);
}
// 非静态变量
String nonStaticWord = "Non Static Hello";
// 非静态代码块
{
System.out.println("父类非静态代码块,nonStaticWord = " + nonStaticWord);
}
// 有参数构造方法
public Parent(String name) {
System.out.println("父类有参构造方法。。。" + name);
}
}
/**
* 子类
*/
static class Child extends Parent {
// 子类构造方法
public Child() {
System.out.println("子类构造方法。。。");
}
// 子类有参数构造方法
public Child(String sex) {
System.out.println("子类有参构造方法。。。" + sex);
}
// 子类非静态变量
String nonStaticWord = "non static word";
// 子类静态变量
static String staticWord = "Static World";
// 子类非静态代码块
{
System.out.println("子类非静态代码块, nonStaticWord = " + nonStaticWord);
}
// 子类静态代码块
static {
System.out.println("子类静态代码块, staticWord = " + staticWord);
}
}
// main方法
public static void main(String[] args) {
new Child();
}
}
2、代码执行结果如下:
父类静态代码块, staticWord = Static Hello
子类静态代码块, staticWord = Static World
父类非静态代码块,nonStaticWord = Non Static Hello
父类构造方法。。。
子类非静态代码块, nonStaticWord = non static word
子类构造方法。。。
Process finished with exit code 0