类加载过程

126 阅读1分钟

类加载过程

  1.加载 

      加载就是将二进制文件加载到内存中

  2.链接(验证,准备,解析)

     验证: 验证加载的文件是否符合规范,比如:是否符合JDK规范

                文件格式验证,比如常量中是否有不被支持的常量

                元数据的验证,比如该类是否继承了被final修饰的类

                

     准备:为类中所有静态变量赋他们的初始值,而不是代码中显式的赋值,

               被final修饰的静态变量会直接赋予原值(常量)

     解析:将符号引用转换为直接引用

               符号引用:类似方法名:hello()

               直接引用:内存地址,或者是偏移量

               比如调用hello()方法,他的内存地址是123,那么hello就是符号引用,而123是直接引用

  3.初始化

     对类的静态变量,静态代码块执行初始化操作

初始化顺序

1.父类静态变量以及静态代码块

2.子类静态变量以及静态代码块

3.父类非静态变量以及非静态代码块

4.父类的构造函数

5.子类非静态变量以及非静态代码块

6.子类的构造函数

类加载器

1.启动类加载器 BootstrapClassloader 主要是加载Java核心类库

2.拓展类加载器 ExtClassLoader

3.应用程序类加载器 ApplicationClassLoader 加载java.class.path目录下的文件

5.自定义加载器