通过一个类的全限定名获取定义此类的二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口linking-链接
验证:确保Class文件的字节流中包含信息符合当前虚拟机要求准备
为类变量(static变量)分配内存并且设置该类变量的默认初始值,即零值不包含用final修饰的static,因为final在编译的时候就会分配好了默认值,准备阶段会显式初始化不会为实例变量分配初始化,实例变量得等到实例化的时候解析:将常量池内的符号引用转换为直接引用的过程
直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄Initialization-初始化
初始化阶段就是执行类构造器方法 代码中包含static变量,就会有clinit方法 构造器是虚拟机视角下的 引导类(启动类)加载器(Bootstrap ClassLoader) 获取引导类加载器,值为null自定义类加载器(User-Defined ClassLoader) Java 将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器包含扩展类(Extension ClassLoader)和系统类系统类加载器(Application ClassLoader) 值为sun.misc.Launcher$AppClassLoader@18b4aac2,并且系统类加载器是全局唯一的