类的加载:
广义上的加载分为三步
step1:加载 load
xxx.java文件通过javac命令编译为xxx.class文件,类加载指的是将类的class文件读入内存,并且
创建一个java.lang.Class对象
(系统中所有的类都是java.lang.Class的实例)
类加载器负责完成类的加载
step2:链接 link
验证:检验被加载的类中是否有正确的内部结构
准备:负责为类的类变量分配内存,并设置默认初始值
解析:将类的二进制数据中的符号引用替换为直接引用
step3:初始化 intitalize
虚拟机负责对类进行初始化,主要是对类变量进行初始化
方式1:声明类变量时指定初始值
方式2:使用静态初始化块为类变量指定初始值
public class Main{
//方式1:
static int a = 6;
static int b;
//方式2:
static{
b = 6
}
}
JVM初始化一个类包含如下几个步骤:
1.假如这个类还没有被加载和链接,则程序先加载并连接该类
2.假如该类的直接父类还没有被初始化,则先初始化其直接父类
3.假如类中有初始化语句,则系统依次执行这些初始化语句
由此可以得知:jvm中最先初始化的总是java.lang.Object类