当我的目录中只有
HelloWorld.java
而没有HelloWorld.class
时,Windows cmd中的java HelloWorld
引发了类未找到异常。然而,java HelloWorld.java
被正确执行,而没有做出HelloWorld.class
。
据我了解,JVM读取扩展名为.class的文件的字节码,但无法读取.java文件。我知道 java.exe 只是一个创建 JVM 并运行它的启动器,但现在我很困惑它如何与 java 代码而不是字节代码正常工作。
在现代 Java 中,为了方便 Java 初学者,java 应用程序将优雅地编译并运行一个
.java
文件。
将其视为java应用程序检测源代码文件,然后将编译工作分包给javac应用程序,将编译后的类缓存在内存中,最后继续运行新编译的类。
流程步骤为:
.java
文件中编写 Java 源代码,其中在 main
定义中包含 class
方法。.class
文件。java应用程序来执行(运行)
main
方法。您可以跳过一些步骤。
.java
文件。 java 应用程序将首先自动编译,就像代表您调用 javac 一样。然后java应用程序将继续运行新编译的类。
.class
文件写入存储。编译后的类缓存在内存中。java HelloWorld.java
在没有创建HelloWorld.class的情况下正确执行了。main
java
文件而不声明类。只需单独编写 main
方法,周围什么都没有。public static
方法声明中删除 main
。Java 团队正在齐心协力,为 Java 初学者铺平道路,克服最初的障碍。他们试图掩盖一些复杂的仪式,并使工具更加友好和包容。
Java 的底层结构和特性仍然存在。这并不是 Java 的“简化”。这些努力只是为初学者提供合理便利的尝试。
结合这些功能,开始使用 Hello World 应用程序非常简单,只需在
HelloWorld.java
文件中编写以下内容即可:
void main() {
System.out.println("Hello, World!");
}
...然后在命令行上调用:
java HelloWorld.java
控制台结果:
你好,世界!
对于 Java 新手来说,这大大减少了劳动量并减少了困惑。
顺便说一下……另一个让 Java 更容易使用的部分是 jshell,一个用于 Java 的 REPL。
初学者和专业人士都发现 jshell 可以方便地运行简短的 Java 代码并提供即时反馈。