JVM将类加载到内存中,对类初始化的过程叫做类加载
类加载分为5步:
加载:load:
将类型的class字节码数据读入内存
验证:校验合法性等
校验是否是java语言(所有用java语言编写的字节码文件开头都是ca fe ba be)
校验版本号(如果是这个字节码文件是用1.8编译器编译的,那么用1.6的JDK是没法加载运行的,可以向下兼容,不可以向上兼容)
以及等等.........
准备:在方法区准备对应的内存,创建Class对象(里面存的是类的信息,例如类的属性,方法等等),为类变量(静态变量)赋默认值,为静态常量赋初始值。
解析:把字节码中的符号引用替换为对应的直接地址引用
初始化:initialize(类初始化)即执行<clinit>类初始化方法,大多数情况下,类的加载就完成了类的初始化,有些情况下,会延迟类的初始化。