我们有一个.java的文件通过执行javac命令可以变成.class文件,当我们调用Java命令的时间class会被加载到内存中,这个过程叫做classloader,即内存加载。
类加载的过程有三个:loading-装载,linking-链接,initializing-初始化
其中linking又分为三个步骤:verification,perparation,resolution;
类加载过程:
1.装载:查找和导入的class文件到内存(loading)
2.链接:其中的解析步骤是可以选择的(linking)
(a) 检查:检查载入的class文件数据的正确性 (verification)
(b) 准备:给类的静态变量分配存储空间,赋默认值 (perparation)
(c) 解析:把class文件常量池中用到的符号引用转为直接内存地址 (resolution)
3.初始化:对静态变量,静态代码块执行初始化工作(initializing)
注意:在链接(linking)的第二步中,此处是为静态代码块分配空间且赋默认值,此时的值为0,若在初始化的时候有static int a = 10; 这个时候才会给初始化赋值为10。
类加载器:
类在加载的过程是通过类加载器加载的,类加载器的加载过程是