Java虚拟机把描述类的收从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终转化成可以被虚拟机直接使用的Java类型,这就是Java虚拟机的类加载机制。
1 类加载的步骤
a)加载
b)验证 准备 解析
c)初始化
d) 使用
e)卸载
一下的情况立即对类进行初始化
a)使用new关键字创建对象的时候,调用一个类的静态方法的时候
b)使用反射的时候
c)当初始化一个类的时候,发现其父类还有进行过初始化
d)虚拟机初始化主类
被动初始化:
a) 对于静态字段,只有直接定义这个字段的类才会被初始化 。
b)初始化数组
c)编译阶段将常量的值存储到常量池
2 在加载阶段,虚拟机要完成以下三件事情:
1) 通过一个类的权限定名来获取定义此类的二进制的字节流
2)将这个字节流所代表的存储结构转化为方法区的运行时的数据结构
3)在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口
3 验证
验证是连接阶段的第一步,这一阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。