类加载的生命周期.png
类的加载主要过程有:加载、连接、初始化。
其中连接分为:验证、准备、解析。
加载
1.通过类的全限定名来获取类的二进制名
2.将二进制流代表的静态存储结构转化为元数据区运行时数据结构
3.在内存中生成代表这个类的java.lang.Class对象
连接
1.验证:验证二进制流是否符合java语言的语义语法
2.准备:为常量分配内存和赋初始值
3.解析:在类型的常量池中寻找类,接口,字段和方法的符号引用,把这些符号引用替换成直接引用的过程。(转换引用以更方便使用)
初始化
对常量变量赋值,java层。
初始化不会马上执行
1、当创建某个类的新实例时(如通过new或者反射等)
2、当调用某个类的静态方法时
3、当使用某个类或接口的静态字段时
4、当初始化某个子类时