描述
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行检验、准备、解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制
类加载的过程
加载、验证、准备、解析、初始化 5个阶段所执行的具体动作
周期包括
- 加载(Loading)
- 验证(Verification)
- 准备(Preparation)
- 解析(Resolution)
- 初始化(Initialization)
- 使用(Using)
- 卸载(Unloading)
总结
类的执行顺序如下:
确定类变量的初始值: 在类初始化的时候,在准备阶段jvm会为类变量(static修饰的变量)初始化,如对象会被初始化为null,int被初始化为0
找到入口执行: 找到main方法,开始执行,在执行之前会对main方法所在类进行初始化
执行类初始化方法: JVM 会按顺序收集类变量的赋值语句、静态代码块,组成类初始化方法去执行
执行对象实例化方法: JVM 会按照收集成员变量的赋值语句、普通代码块,最后收集构造方法,组成对象实例化方法去执行
释义:
符号引用 :
符号引用以一组符号来描述所引用的目标。符号引用可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可,符号引用和虚拟机的布局无关。个人理解为:在编译的时候一个每个java类都会被编译成一个class文件,但在编译的时候虚拟机并不知道所引用类的地址,多以就用符号引用来代替,而在这个解析阶段就是为了把这个符号引用转化成为真正的地址的阶段。
参考链接: