- 程序入口在mian函数,会先检查mian函数所在类是否含有继承关系,如果有会逐步向上检查加载;
- 结果(加载顺序):
- 值得一提的是,System.out.println("------------加载顺序打印------------");这一句代码也是在static块加载、初始化之后才运行的。
- static数据只在类第一次加载时执行,只执行一次,伴随类的加载而执行初始化操作。可以认为加载完类后的首个动作就是初始化static数据。
- mian函数
- public static void main(String[] args){
System.out.println("------------加载顺序打印------------");
new Homework();
}
-
爷爷类的static块执行 父类的static块执行 子类的static块执行 ------------加载顺序打印------------ 爷爷类的普通代码块执行 爷爷类的无参构造方法执行 父类的普通代码块执行 父类的无参构造方法执行 子类的普通代码块执行 子类的无参构造方法执行
加载顺序:父类静态代码块=》子类静态代码块=》父类普通代码块=》父类无参构造方法=》子类的普通代码块
=》子类的无参构造方法 - 测试的代码:
-
public class Homework extends Homework1{ static { System.out.println("子类的static块执行"); } { System.out.println("子类的普通代码块执行"); } Homework(){ System.out.println("子类的无参构造方法执行"); } public static void main(String[] args){ System.out.println("------------加载顺序打印------------"); new Homework(); } } class Homework1 extends HomeWork2{ static { System.out.println("父类的static块执行"); } { System.out.println("父类的普通代码块执行"); } Homework1(){ System.out.println("父类的无参构造方法执行"); } } class HomeWork2{ static { System.out.println("爷爷类的static块执行"); } { System.out.println("爷爷类的普通代码块执行"); } HomeWork2(){ System.out.println("爷爷类的无参构造方法执行"); } }
含有继承关系的父类、子类static代码块、普通代码块、构造函数加载的顺序
最新推荐文章于 2021-02-13 17:04:35 发布