类的加载过程分为五个部分:(简写,后续补充)
加载、(验证、准备、解析)、初始化。
验证、准备、解析可以看作是链接过程。
加载
从文件加载到内存的过程。
验证
检查是否有不符合规范的代码,会不会出现安全问题
准备
为类变量分配内存(不是为实例,实例在初始化的时候才分配)。例如static变量(不会赋值,只给默认初始值)。
final static在该阶段就会赋代码值
解析
将符号引用直接转换为直接引用的过程。
初始化
实例化对象的过程,执行构造器。
静态变量、代码块在类加载的时候就会调用,严格按照静态代码声明的顺序调用。
执行构造函数的时候,会先把其他属性初始化、初始化代码。
package javatest.pattern.staticload;
/**
* @description:
* @modifyContent:
* @author: Maple Chan
* @date: 2020-08-20 20:56:01
* @version: 0.0.1
*/
public class StaticTest {
public static void main(String[] args) {
System.out.println("100");
}
static StaticTest st = new StaticTest();
static {
System.out.println("1");
}
{
System.out.println("2");
}
StaticTest() {
System.out.println("3");
System.out.println("a=" + a + ",b=" + b);
}
public static void staticFunction() {
System.out.println("4");
}
int a = 110;
static int b = 112;
}
如果存在继承关系的时候,会先调用父类的静态代码块再执行子类的。