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

java命令执行.java与.class文件的差异及无编译执行原理咨询

核心原因:Java 11引入的单文件源程序运行特性

你用的java Main.java是Java 11开始支持的单文件源程序直接运行功能,本质上它还是会编译,只是编译过程完全在内存中完成,不会把生成的字节码写入磁盘,所以你看不到Main.class文件。

具体实现流程

  • 执行java Main.java时,JDK会自动调用编译器(javac)在内存中编译指定的源文件
  • 编译生成的字节码不会被持久化到磁盘,而是直接传递给JVM的类加载器
  • 类加载器加载字节码后,JVM就会执行main方法
  • 执行完成后,内存中的字节码会被回收,不会留下任何磁盘文件

为什么耗时更长?

传统方式先执行javac Main.java生成Main.class,之后每次运行java Main都是直接加载已编译好的字节码,跳过了编译步骤。而java Main.java每次执行都要重新完成「编译+运行」的全流程,相当于把两步合成一步但重复做了编译工作,所以耗时自然更长。

补充说明

这个特性的设计初衷是简化小型Java程序(比如脚本、工具类)的开发和运行流程,不用再手动分编译、执行两步操作,尤其适合快速测试单文件代码的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:12:05