Posts /

Java类加载机制

20 Aug 2020

Java类加载机制


类的加载过程分为五个部分:(简写,后续补充)

加载、(验证、准备、解析)、初始化。

验证、准备、解析可以看作是链接过程。

加载

从文件加载到内存的过程。

验证

检查是否有不符合规范的代码,会不会出现安全问题

准备

为类变量分配内存(不是为实例,实例在初始化的时候才分配)。例如static变量(不会赋值,只给默认初始值)。

final static在该阶段就会赋代码值

解析

将符号引用直接转换为直接引用的过程。

初始化

实例化对象的过程,执行构造器。

静态数据加载过程

静态变量、代码块在类加载的时候就会调用,严格按照静态代码声明的顺序调用。

执行构造函数的时候,会先把其他属性初始化、初始化代码。

package javatest.pattern.staticload;

/**
 * @description:
 * @modifyContent:
 * @author: Maple Chan
 * @date: 2020-08-20 20:56:01
 * @version: 0.0.1
 */
public class StaticTest {

    public static void main(String[] args) {
        System.out.println("100");
    }
    static StaticTest st = new StaticTest();
    
    static {
        System.out.println("1");
    }
    
    {
        System.out.println("2");
    }

    StaticTest() {
        System.out.println("3");
        System.out.println("a=" + a + ",b=" + b);
    }

    public static void staticFunction() {
        System.out.println("4");
    }

    int a = 110;
    static int b = 112;
}

如果存在继承关系的时候,会先调用父类的静态代码块再执行子类的。