重温类加载的过程:加载 验证 准备(为static类变量分配内存,初始化设置为null or 0) 解析 初始化(类变量赋值阶段)
1、虚拟机是优先加载含有main函数的类,会对此类优先加载,故要先加载类,才能执行main函数。
注:注意类加载时机,调用类的常量不加载。
2、加载类时候,若牵扯到父类子类,则一般要先调用父类,如果从子类调用父类的静态变量,不需要加载子类,只需要加载父类。
若两类都需要加载,则顺序是父类显式静态初始化成员变量、代码块 ------->子类显式静态初始化代码块 、成员变量
3、若实例化了此类,就会在静态参数加载完之后(仅一次),再去加载这个类的成员变量、非静态代码块,构造函数。
“编译器会将实例变量初始化和实例代码块初始化相关代码放到类的构造函数中去,并且这些代码会被放在对超类构造函数的调用语句之后,构造函数本身的代码之前。”
顺序是:父类非静态实例初始化代码块、成员变量(按顺序) > 父类构造函数 > 子类非静态实例初始化代码块 (按顺序)> 子类构造函数
如果要彻底的弄懂这个,就要知道类加载和类实例化的过程,这里不再赘述,仅作为笔记。
参考:
我竟然不再抗拒 Java 的类加载机制了:https://zhuanlan.zhihu.com/p/73078336