类加载
类加载:类加载器将class文件加载到虚拟机的内存中(放在方法区中)
类加载过程:
加载:在硬盘上查找并通过IO读入字节码文件。
连接:执行校验、准备、解析步骤。
校验:校验字节码文件的正确性。(a.校验文件格式:是否为.class文件 b.检验元数据:是否符合java语言规范 c.检验字节码:程序语义是否合法符合逻辑 d.检验符号引用,确保引用一定会被访问到,不会出现类不会被访问到的问题)(校验步骤是非必需步骤,可通过-Xverifynone关闭大部分的类验证)
准备:给类的静态变量分配内存,并赋予默认值。
解析:将符号引用替换为直接引用,该阶段会把一些静态方法(符号引用,比如main()),替换为指向数据所存内存的指针或句柄等(直接引用)。这就是所谓的静态链接过程(类加载期间完成)。而动态链接是指在程序运行期间完成的符号引用替换为直接引用。
初始化:对类的静态变量初始化为指定的值,执行静态代码块。
ps:
符号引用:用一组符号来表示我们所需的目标(简单说就是用符号表示类的信息,包括类名、变量名、方法名、甚至是(),都用符号来代替)
直接引用:就是地址值表示我们所需目标
符号引用替换为直接引用:就是将我们所需目标的符号替换成地址(此过程在类加载期间完成就是静态链接,在程序运行期间完成就是动态链接)
学习没有一蹴而就,放下急躁,一步一步扎实前进