java.exe如何执行java源代码?

问题描述 投票:0回答:1

当我的目录中只有

HelloWorld.java
而没有
HelloWorld.class
时,Windows cmd中的
java HelloWorld
引发了类未找到异常。然而,
java HelloWorld.java
被正确执行,而没有做出
HelloWorld.class

据我了解,JVM读取扩展名为.class的文件的字节码,但无法读取.java文件。我知道 java.exe 只是一个创建 JVM 并运行它的启动器,但现在我很困惑它如何与 java 代码而不是字节代码正常工作。

java jvm java-11
1个回答
1
投票

tl;博士

在现代 Java 中,为了方便 Java 初学者,java 应用程序将优雅地编译并运行一个

.java
文件。

将其视为java应用程序检测源代码文件,然后将编译工作分包给javac应用程序,将编译后的类缓存在内存中,最后继续运行新编译的类。

详情

JDK 捆绑了几十个工具。其中一些至关重要:

  • javac — 将
    .java
    源代码文本文件编译为
    .class
    字节码文件。
  • java — 通过启动
    JVM
    来执行该 .class 文件。

流程步骤为:

  1. 您在
    .java
    文件中编写 Java 源代码,其中在
    main
    定义中包含
    class
    方法。
  2. 您将该文件提交给编译器,例如与每个 JDK 捆绑在一起的 javac 应用程序。
  3. 编译器输出一个
    .class
    文件。
  4. 您可以通过启动与每个 JDK 捆绑在一起的
    java
    应用程序来执行(运行)main 方法。

您可以跳过一些步骤。

  • 编译运行单个文件:
    从 Java 11 开始,您可以将 java 应用程序指向
    .java
    文件。 java 应用程序将首先自动编译,就像代表您调用 javac 一样。然后java应用程序将继续运行新编译的类。
    • 没有
      .class
      文件写入存储。编译后的类缓存在内存中。
    • 请参阅 JEP 330:启动单文件源代码程序了解所有详细信息。
    • 您注意到了这种行为:但是,
      java HelloWorld.java
      在没有创建HelloWorld.class的情况下正确执行了。
  • 简化
    main

    作为 Java 21 中的预览功能,您可以:

动机

Java 团队正在齐心协力,为 Java 初学者铺平道路,克服最初的障碍。他们试图掩盖一些复杂的仪式,并使工具更加友好和包容。

Java 的底层结构和特性仍然存在。这并不是 Java 的“简化”。这些努力只是为初学者提供合理便利的尝试。

世界你好

结合这些功能,开始使用 Hello World 应用程序非常简单,只需在

HelloWorld.java
文件中编写以下内容即可:

void main() {
    System.out.println("Hello, World!");
}

...然后在命令行上调用:

java HelloWorld.java

控制台结果:

你好,世界!

对于 Java 新手来说,这大大减少了劳动量并减少了困惑。


jshell

顺便说一下……另一个让 Java 更容易使用的部分是 jshell,一个用于 Java 的 REPL

初学者和专业人士都发现 jshell 可以方便地运行简短的 Java 代码并提供即时反馈。

蓝J

另一个对初学者有用的工具是BlueJ,这是一个专为学生设计的IDE

© www.soinside.com 2019 - 2024. All rights reserved.