当前位置: 首页 > news >正文

说一下类装载的执行过程?

类装载是 Java 运行时的核心机制,用盖房子的过程来类比,帮你轻松理解全过程(3 阶段 5 步骤):


一、类装载的三大阶段

就像盖房子要经过:准备材料→组装框架→装修入住

  1. Loading(加载)

    • 📥 找设计图:通过类加载器(ClassLoader)查找类的二进制字节流(如.class文件)
    • 🏗️ 搭地基:将字节流转换为方法区的运行时数据结构,并在堆中生成 Class 对象(后续反射操作的入口)
    • 🔄 类加载器协作:采用双亲委派机制,优先让父加载器尝试加载(防止重复加载和安全问题)

    示例:

    // 当执行 new Student() 时
    ClassLoader loader = Student.class.getClassLoader(); // 实际由 AppClassLoader 加载
    
  2. Linking(链接)

    • ① Verification(验证)
      🔍 质检员检查:校验字节码是否符合 JVM 规范(如魔数检查、语法验证),防止篡改的字节码执行

    • ② Preparation(准备)
      💰 给毛坯房通电:为静态变量(static)分配内存并设置初始值(零值)
      示例:static int age = 18; 此时 age=0

    • ③ Resolution(解析)
      🧩 组装说明书:将符号引用(如全限定名)转换为直接引用(内存地址指针)

  3. 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); 
    }
}

输出顺序:

  1. 静态块:装修施工
  2. 静态方法:采购材料
  3. count = 5

三、高频面试考点

  1. 被动引用不触发初始化

    System.out.println(SubClass.superValue); // 父类的静态字段,子类不会初始化
    
  2. 接口与类的初始化差异
    接口初始化不要求父接口全部初始化(用到时才初始化)

  3. 类加载器层级
    Bootstrap(加载核心库)→ Extension(扩展库)→ Application(用户类)


四、记忆口诀

“一装二链三初始”
装:找文件建结构
链:验-准-解三步行
初始:静态统统跑起来

通过这个盖房子模型,是不是对类加载过程一目了然了呢? 😊

相关文章:

  • JxBrowser 7.42.1 版本发布啦!
  • 对话式AI引擎:DeepSeek技术引领多模态交互新篇章
  • 刚充值Deepseek账号,但接入官方的API却遇到了问题【VSCode Cline Cursor Deepseek deepseek-reasoner】
  • 表单验证和正则表达式
  • debain12.9安装unsloth大模型微调环境
  • 为什么用match case 而不用if else
  • 算法-二叉树篇11-左叶子之和
  • 计算机网路:自顶向下方法——第三章 运输层
  • 如何评估 LLM:大型语言模型评估方法全解析与综述
  • 【Linux 操作系统】进程管理 - 冯诺依曼体系|进程|环境变量|进程地址空间
  • 服务器间迁移conda环境
  • 【字符串】最长公共前缀 最长回文子串
  • 保护密码等敏感信息的几个常用方法
  • HTML邮件的制作以及遇到的问题
  • 每天练打字15:时隔多日后回归,目前赛文速度110.97
  • Binder通信协议
  • 大数据SQL调优专题——调优切入
  • FPGA开发时序图绘制
  • domain 网络安全 网络安全域
  • Vulhub靶机 Apache APISIX Dashboard RCE(CVE-2021-45232)(渗透测试详解)
  • 国家统计局:4月份居民消费价格同比下降0.1%
  • 工程院院士葛世荣获聘任为江西理工大学校长
  • 中日有关部门就日本水产品输华问进行第三次谈判,外交部回应
  • 溢价26.3%!保利置业42.4亿元竞得上海杨浦宅地,楼板价80199元/平方米
  • 李云泽:对受关税影响较大、经营暂时困难的市场主体,一企一策提供精准服务
  • 印度袭击巴基斯坦已致至少3人死亡