系统会通过加载,连接,初始化三个步骤来对该类进行初始化操作:
①类的加载:
类加载时指将类的class文件(字节码文件)载入内存中,并为之创建一个java.lang.Class对象,我们称之为字节码对象.
类的加载过程由类加载器(ClassLoader)完成,类加载器通常由JVM提供,我们称之为系统类加载器,我们也可以继承ClassLoader类来提供自定义类加载器.
不同的类加载器可以实现加载本地字节码文件,jar包中的字节码,通过网络加载字节码等.
②类的连接:
当类被加载进内存之后,系统为之生产一个对应的Class对象,接着把类的二进制数据合并到JRE中.
1>:验证:检测被加载的类是否有正确的内部结构.
2>:准备:负责为类的static变量分配内存,并设置默认值.
3>:解析:把类的二进制数据中的符号引用(变量)替换为直接引用(深入分析JVM).
③类的初始化:
在此阶段,JVM负责对类进行初始化,主要对static变量进行初始化. 类的初始化一个类包含几个步骤:
1>:如果该类还未被加载和连接,则程序先加载并连接该类.
2>:如果该类的直接父类还未被初始化,则先初始化其父类.
3>:如果类中有初始化语句(静态代码块),则系统依次执行这些初始化语句.