类的加载分为五个过程:加载、验证、准备、解析、初始化
其中验证、准备、解析并称为连接,故可简称为:加载、连接、初始化
加载:
通过类加载器将class文件(字节码)内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成代表这个类的Class对象(堆内)
连接:
验证:
确保加载的类的信息符合JVM规范,无安全方面的问题
准备:
正式在方法区中为类变量(静态变量)及类方法(静态方法)分配内存,并设置类变量的默认初始值(普通变量的内存随类的实例化分配在堆内),执行静态代码块(先后顺序视代码编写顺序而定)
解析:
虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)
初始化:
执行类构造器
注:
类构造器用于构造类信息,区别于构造类对象的构造方法
当初始化一个类的时候,若发现其父类尚未初始化,则需先将其父类初始化
虚拟机会保证每一个类的
常量在编译阶段就已赋值。若为静态常量,则在准备阶段赋初始值时,为其赋设定值