java 类加载机制(流程)
java 类加载过程,主要分为 加载--> 连接 --> 解析 --> 初始化
连接又细分为:验证 --> 准备 --> 解析
加载:通过io把class的字节码加载再jvm的方法区里,并且在堆中创建class对象
验证:是检验class是不是符合标准的
准备:初始化静态变量(如 int 的静态变量 i 附一个初始化的0 static int i = 0), 再分配内存
解析:将变量的符号引用改为直接引用
初始化:给静态变量赋值,运行静态代码块
------------------------------------------------------分页--------------------------------------------------------------
验证:java会把我们的写得java文件,编译成这样的字节码class文件,下图是一个class的文件内容,类加载的时候会去验证这些十六进制的内容是不是符合标准(具体可以参考 Java虚拟机规范)
准备:就是给静态(static)变量赋初始化值 , 下图这个时候i 会被初始化 i = 0 (double类型初始化 0.0; float类初始化 0.0 ; boolean 类型初始化 false ; String 类型初始化 null)
public class ClassInitialization {
//初始化值 i =0;
static int i = 5;
}
题外话:常量( final static ) 赋值在编译的时候,实例变量是赋值在产生class对象的时候
解析:将变量的符号引用改为直接引用。
就好比你去买奶茶,(珍珠椰果红豆Q果布点奶盖红茶,三分糖,去冰)已经点好了(new ClassloderDemo),但还没给你,等做好了,才交给你(解析的时候)
就这里的
ClassloderDemo classloderDemo = new ClassloderDemo();
就是在解析的时候,classloderDemo才引用对象
public class ClassloderDemo {
public static void main(String[] args) {
ClassloderDemo classloderDemo = new ClassloderDemo();
}
}