看那篇文章记的笔记
文章链接在此:https://blog.csdn.net/xqnode/article/details/106341050
main方法在new一个对象的时候是在JVM中被加载的过程,如下:
加载:将类的class文件讲到内存,并为之创建一个java.lang.Class对象
链接:
验证:保证加载类的正确性
准备:为静态变量分配内存并设置默认初始值
解析:把内中的符号引用转化为直接引用
符号引用:引用的目标不一定加载到内存中
直接引用:指向的目标一定是加载进来的
初始化:为类的静态变量依次赋予初始值(这里指的是代码中的值),包括静态代码也会执行,这个阶段会执行类的构造函数,JVM负责把类的成员变量进行初始化赋值
成员变量在对象实例化之前初始化
类加载最终产品是位于堆的Class对象封闭了类在方法区内的数据结构,并向Java程序员提供了访问方法区内的数据结构的接口
如果该类还未被加载到内存中则JVM会通过加载、链接(验证、准备、解析)、初始化
顺序:加载、验证、准备、初始化确定,解析则不确定
因Java支持动态绑定(多态),运行时才知道最终对象的引用,所以解析可能发生在初始化之后
虽然它们是按顺序开始,