You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

声明接口类型变量并初始化实现类,JVM何时加载该类?代码场景疑问

接口实现类的JVM加载时机问题

核心结论

  • 接口Vehicle在应用启动阶段被加载,是因为它作为方法内的类型声明,属于类的静态依赖,会在JsonSampleController类加载时被JVM提前解析;
  • 具体实现类Car不会在应用启动时加载,只有当getUser()方法被**实际调用(运行时)**时,JVM执行到new Car()这行代码,才会触发Car类的加载、链接与初始化流程。

原因解析

JVM类加载遵循**懒加载(延迟加载)**原则,除非触发特定条件(比如类的静态代码块执行、静态变量被主动引用等),否则类不会提前加载。在你的示例场景中:

  • Vehicle vehicle = new Car();里的Vehicle作为局部变量的类型声明,属于类的符号引用,会在JsonSampleController类加载的解析阶段被转换为直接引用,因此Vehicle会随控制器类一同加载;
  • 而new Car()是实例化代码,只有当方法真正被执行时,JVM才会去查找并加载Car类,完成后续的实例创建操作。

验证方法

你可以通过以下步骤验证结论:

  1. 启动应用后,调用/v1/user接口;
  2. 观察-verbose:class的输出日志,此时会看到Car类被加载的记录。

内容的提问来源于stack exchange,提问作者nzomkxia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:27:13