java.exe如何执行Java源代码?为何直接运行.java文件可成功?
问题
当目录中仅存在HelloWorld.java文件而无HelloWorld.class文件时:
- 在Windows cmd中执行
java HelloWorld会抛出类未找到异常 - 执行
java HelloWorld.java却可正常运行,且不会生成HelloWorld.class文件
已知JVM只能读取.class扩展名文件中的字节码,无法直接读取.java文件;java.exe是创建并启动JVM的启动器,困惑为何它能直接处理Java源码而非字节码。
原因解析
- 从Java 11开始,
java命令新增了单文件源码直接运行的功能,无需提前手动编译。 - 执行
java HelloWorld.java时,java命令会在后台自动完成这些操作:临时编译.java源码生成字节码,将字节码直接加载到JVM执行,执行结束后自动删除临时生成的字节码文件,所以不会留下HelloWorld.class。 - 而
java HelloWorld是传统的运行方式,它会直接查找当前目录下已编译好的HelloWorld.class文件,找不到就抛出类未找到异常——这种方式只认编译后的字节码文件。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

