今日学习目标

  1. 编写并运行第一个Java程序“HelloWorld”。
  2. 理解JVM、JRE、JDK的核心概念及其关系。
  3. 通过与C++、Python对比,掌握Java的语言类型特性。

第一部分:第一个Java程序——HelloWorld实战

通过一个简单的程序,直观感受Java从代码到运行的完整流程。

1. 编写源代码

  1. 在目录 D:\iscode\java 中,新建一个文本文件。
  2. 将以下代码复制到文件中:
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
  1. 将文件重命名为 HelloWorld.java。

2. 编译与运行

  1. 使用 Win + R 打开运行窗口,输入 cmd 并回车,启动命令提示符,切换到源代码所在目录:
cd D:\iscode\java
  1. 使用 javac 命令编译源代码。这会将 .java 文件翻译成JVM能理解的 .class 字节码文件。
javac HelloWorld.java
  1. 使用 java 命令运行程序。
java HelloWorld

如果一切顺利,你将在屏幕上看到输出:Hello, World!。

3. 关键问题解析

  • 问题1:为什么public类的类名必须与文件名一致?
    答:Java语言规范(JLS)规定:如果一个类被声明为public,那么它必须位于与类名同名的源文件中(包括大小写); 一个源文件中可以没有public类,也可以有多个非public类,但最多只能有一个public类。当编译器编译一个源文件时,它会为每个类生成一个独立的.class文件。.class文件的命名规则是:<类名>.class。对于public类,由于其可以被其他包中的类访问,所以编译器必须确保在编译其他源文件时能够通过类名找到对应的文件。如果public类的源文件名与类名不一致,那么在其他源文件中引用这个public类时,编译器就会困惑:我应该去哪个文件里找这个类?

  • 问题2:javac 和 java 命令是什么?
    答:它们是JDK提供的核心工具。
    javac:编译工具,将 .java 源代码编译成JVM可执行的 .class 字节码文件。
    java:运行工具,用于启动JVM,并加载 .class 文件开始解释执行。


第二部分:深入核心——JVM、JRE与JDK

运行HelloWorld的背后,是Java平台三大核心组件的支撑。

1. 基础概念

  • JVM(Java Virtual Machine,Java虚拟机):是Java程序的运行环境,它负责将Java字节码(.class文件)解释成特定机器码并执行。比如上述HelloWorld程序中运行的"java HelloWorld"就是启动JVM并解释运行。正是JVM的存在,使得Java实现了“一次编写,到处运行”的跨平台特性,同一份字节码可以在任何安装了对应版本JVM的操作系统上运行。
  • JRE(Java Runtime Environment,Java运行环境):如果你想运行一个已有的Java程序,你只需要JRE。它包含运行Java程序所必需的组件:JVM + 核心类库+ 其他基础运行工具(如 java 运行工具)。
  • JDK (Java Development Kit,Java开发工具包):如果你想开发Java程序,你必须安装JDK。它包含了JRE的全部内容,并额外提供了开发工具,如编译工具 (javac)、调试工具 (jdb) 等。

2. JVM、JRE、JDK的关系:

通过上述基础概念梳理,我们可以得到:JDK ⊃ JRE ⊃ JVM。

  • JDK = JRE + 开发工具
  • JRE = JVM + 核心类库 + 运行基础工具

如图所示:

包含

包含

包含

包含

包含

需要

需要

依赖

执行

JDK
Java开发工具包

JRE
Java运行环境

JVM
Java虚拟机

开发工具
javac等

核心类库

运行工具
java等

开发者
编写Java程序

用户
运行Java程序

一次编写
到处运行

.class字节码文件


第三部分:对比理解——Java的语言类型

特性维度 C++(编译型语言) Python(解释型语言) Java(混合型语言)
核心过程 源代码(.cpp)由编译器一次性全部翻译成特定CPU和操作系统能直接执行的机器码文件 源代码(.py)直接交给解释器,解释器会逐条边翻译边执行,通常不生成独立的中间文件。 源代码(.java)先由javac全部编译成与平台无关的字节码(.class),然后由JVM加载并逐条解释执行
跨平台性 。生成的机器码依赖底层操作系统和硬件。比如Windows编译的程序无法直接在Linux上运行,需要重新编译。 只要目标系统安装了对应版本的Python解释器,同一份源代码就可以直接运行。 (“一次编写,到处运行”)。关键在于字节码是统一的,只要系统安装了对应的JRE(内含JVM),同一份.class文件就能运行。

以上为个人学习总结,旨在梳理个人理解。如有疏漏或不当之处,欢迎指正与交流。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐