一.初识类的生命周期
类的生命周期分为加载,连接,初始化,使用,卸载五个阶段。
其中连接阶段又分为验证,准备,解析三个小阶段。
二.类的加载阶段

类的加载器通过类的全限定名通过不同渠道加载类的字节码信息到内存中,同时在方法区中创键instanceKlass对象,并将字节码信息保存到方法区。同时在堆区中创建java.lang.class对象保存类的方法和字段等信息。并将方法区和堆区建立关联。开发者直接访问堆区就好了
为什么还要使用堆区呢?直接访问方法区不行吗?
方法区基于c和c++实现,java无法直接访问,并且直接访问方法区可能篡改底层代码,造成安全问题。
三.类的连接阶段
1.验证
根据JVM虚拟机规范去验证字节码文件是否符合规范
2.准备
在堆区中为静态变量分配内存并赋值为0,常量直接赋值为固定值
为什么赋值为0呢?
变量中的内存可能没有进行垃圾回收,导致变量是垃圾值。
3.解析
将常量池中的符号引用解析为直接引用
所谓符号引用就是通过字符串编号等文字信息进行查找
而直接引用时通过内存地址进行查找
四.类的初始化阶段
类的初始化阶段会执行字节码文件中clinit方法的字节码指令完成类的初始化。
什么时候触发类的初始化呢?
1.访问静态变量或者静态方法。常量除外。
2.new对象
3.执行该类下的main方法
4.执行class.forName()方法
类之所以初始化都是因为需要用到该类了。
并且
子类完成初始化之前父类一定先初始化。