Java Static 加载顺序解析
流程图
flowchart TD
A(开始) --> B(加载父类的静态变量和静态代码块)
B --> C(加载子类的静态变量和静态代码块)
C --> D(加载父类的实例变量和实例代码块)
D --> E(调用父类的构造方法)
E --> F(加载子类的实例变量和实例代码块)
F --> G(调用子类的构造方法)
G --> H(结束)
代码解析
- 加载父类的静态变量和静态代码块
// 父类
public class Parent {
// 静态变量
public static String parentStaticField = "Parent Static Field";
// 静态代码块
static {
System.out.println("Parent Static Block");
}
}
- 加载子类的静态变量和静态代码块
// 子类
public class Child extends Parent {
// 静态变量
public static String childStaticField = "Child Static Field";
// 静态代码块
static {
System.out.println("Child Static Block");
}
}
- 加载父类的实例变量和实例代码块
// 父类
public class Parent {
// 实例变量
public String parentInstanceField = "Parent Instance Field";
// 实例代码块
{
System.out.println("Parent Instance Block");
}
// 构造方法
public Parent() {
System.out.println("Parent Constructor");
}
}
- 加载子类的实例变量和实例代码块
// 子类
public class Child extends Parent {
// 实例变量
public String childInstanceField = "Child Instance Field";
// 实例代码块
{
System.out.println("Child Instance Block");
}
// 构造方法
public Child() {
System.out.println("Child Constructor");
}
}
整个加载顺序的流程
- 加载父类的静态变量和静态代码块
- 加载子类的静态变量和静态代码块
- 加载父类的实例变量和实例代码块
- 调用父类的构造方法
- 加载子类的实例变量和实例代码块
- 调用子类的构造方法
- 结束
通过以上步骤,你可以清晰地了解Java中static加载顺序的过程。希望这篇文章可以帮助你更好地理解这一概念,加深对Java静态加载顺序的理解。如果有任何疑问,欢迎随时向我提问。
甘特图
gantt
title Java Static 加载顺序甘特图
dateFormat YYYY-MM-DD
section 静态加载顺序
加载父类的静态变量和静态代码块 : done, 2022-01-01, 1d
加载子类的静态变量和静态代码块 : done, 2022-01-02, 1d
加载父类的实例变量和实例代码块 : done, 2022-01-03, 1d
调用父类的构造方法 : done, 2022-01-04, 1d
加载子类的实例变量和实例代码块 : done, 2022-01-05, 1d
调用子类的构造方法 : done, 2022-01-06, 1d
希望以上内容对你有所帮助,如果还有其他问题需要解答,请随时联系我。祝你学习进步,工作顺利!