说一下类装载的执行过程?
类装载是 Java 运行时的核心机制,用盖房子的过程来类比,帮你轻松理解全过程(3 阶段 5 步骤):
一、类装载的三大阶段
就像盖房子要经过:准备材料→组装框架→装修入住
-  Loading(加载) - 📥 找设计图:通过类加载器(ClassLoader)查找类的二进制字节流(如.class文件)
- 🏗️ 搭地基:将字节流转换为方法区的运行时数据结构,并在堆中生成 Class 对象(后续反射操作的入口)
- 🔄 类加载器协作:采用双亲委派机制,优先让父加载器尝试加载(防止重复加载和安全问题)
 示例: // 当执行 new Student() 时 ClassLoader loader = Student.class.getClassLoader(); // 实际由 AppClassLoader 加载
-  Linking(链接) -  ① Verification(验证) 
 🔍 质检员检查:校验字节码是否符合 JVM 规范(如魔数检查、语法验证),防止篡改的字节码执行
-  ② Preparation(准备) 
 💰 给毛坯房通电:为静态变量(static)分配内存并设置初始值(零值)
 示例:static int age = 18; 此时 age=0
-  ③ Resolution(解析) 
 🧩 组装说明书:将符号引用(如全限定名)转换为直接引用(内存地址指针)
 
-  
-  Initialization(初始化) 
 🎉 精装修入住:执行类构造器<clinit>()方法(编译器自动收集静态代码块和静态变量赋值)
 示例:上一步 age=0,此时执行 age=18
二、关键特性演示
public class LoadDemo {
    static {
        System.out.println("静态块:装修施工"); // 初始化阶段执行
    }
    
    private static int count = initCount(); // 初始化阶段赋值
    
    static int initCount() {
        System.out.println("静态方法:采购材料");
        return 5;
    }
    
    public static void main(String[] args) {
        System.out.println("count = " + count); 
    }
}
输出顺序:
- 静态块:装修施工
- 静态方法:采购材料
- count = 5
三、高频面试考点
-  被动引用不触发初始化 System.out.println(SubClass.superValue); // 父类的静态字段,子类不会初始化
-  接口与类的初始化差异 
 接口初始化不要求父接口全部初始化(用到时才初始化)
-  类加载器层级 
 Bootstrap(加载核心库)→ Extension(扩展库)→ Application(用户类)
四、记忆口诀
“一装二链三初始”
 装:找文件建结构
 链:验-准-解三步行
 初始:静态统统跑起来
通过这个盖房子模型,是不是对类加载过程一目了然了呢? 😊
