Skip to content

Chapter 01 · 走进 Java 世界

你的第一行 Java 代码,从这里开始。


🎯 本章目标

  • 理解 Java 是什么、为什么这么火
  • 搞清楚 JDK、JRE、JVM 三个让人头大的缩写
  • 在自己的电脑上跑通第一个 Java 程序
  • 知道一段 Java 代码从「写下来」到「跑起来」中间发生了什么

1. Java 是什么?用一个生活例子说明

想象你写了一本中文小说,想让全世界的人都能看:

  • 方案 A:把小说翻译成英文、日文、法文、德文……每个国家都翻译一遍。累死。
  • 方案 B:先翻译成一种"通用语",然后给每个国家配一个"通用语 → 本地语"的翻译官,看的时候现场翻译。这才聪明。

Java 就是方案 B。

  • 你写的 .java 文件 → 被编译成统一的"通用语"(字节码 .class
  • 每台机器上装一个 JVM(Java 虚拟机) 当翻译官
  • JVM 把字节码翻译成当前机器能懂的指令(Windows、Mac、Linux 都有自己的 JVM)

这就是 Java 最响亮的口号:"Write Once, Run Anywhere"(一次编写,到处运行)。

Java 跨平台原理


2. JDK / JRE / JVM 到底是啥?

这三个词新手最容易搞混。我们用一个 "汽车 4S 店" 的比喻:

缩写全称类比用来做什么
JVMJava Virtual Machine汽车的发动机真正执行字节码的核心
JREJava Runtime Environment整辆能开的车(发动机+轮子+座椅)运行 Java 程序的最小环境(JVM + 核心类库)
JDKJava Development Kit4S 店(车 + 维修工具 + 设计图纸)开发 Java 程序的全套工具(JRE + 编译器 javac + 调试工具)

关系:JDK ⊃ JRE ⊃ JVM

JDK JRE JVM 包含关系

💡 一句话总结:开发选 JDK,只跑别人写好的程序选 JRE,至于 JVM —— 它在 JDK 和 JRE 里都自带,不用单独装。


3. 为什么大家都在用 Java?

优势通俗解释
跨平台写一份代码,Windows / Linux / Mac 都能跑
生态强大Spring、MyBatis、Dubbo……几乎所有后端轮子都有
企业首选银行、电商、社交、政府系统的中后台基本都是 Java
岗位多BOSS 直聘上 Java 岗位常年位居前三
垃圾自动回收写代码不用手动 free(),新手友好

⚠️ 缺点也得知道:相比 Python,Java 写起来啰嗦;相比 C++,性能略低;启动慢(不过 GraalVM 在改善这一点)。


4. 安装 JDK:你的开发环境

步骤 1:下载

推荐两个发行版:

版本选择建议

  • 学习推荐 JDK 17 LTS(长期支持版本,企业最常用)
  • 也可以用 JDK 21 LTS(最新 LTS)
  • 不要选奇数版本(11 之后只有偶数年是 LTS)

步骤 2:安装

  • Windows:双击 .msi 文件,下一步即可。会自动配置环境变量。
  • macOS:双击 .pkg 安装,自动配置。
  • Linux:解压 tarball 到 /opt/jdk-17,然后配置 JAVA_HOME
bash
export JAVA_HOME=/opt/jdk-17
export PATH=$JAVA_HOME/bin:$PATH

步骤 3:验证

打开命令行(Windows 是 cmd / PowerShell,Mac/Linux 是 Terminal),输入:

bash
java -version
javac -version

看到类似这样的输出就成功了:

openjdk version "17.0.10" 2024-01-16
OpenJDK Runtime Environment Temurin-17.0.10+7 (build 17.0.10+7)
OpenJDK 64-Bit Server VM Temurin-17.0.10+7 (build 17.0.10+7, mixed mode)

🔧 如果提示"不是内部命令":环境变量没配好。Windows 下到「系统属性 → 环境变量 → Path」里加上 JDK 的 bin 目录。


5. 你的第一个 Java 程序

Step 1: 写代码

新建文件 HelloWorld.java,写入以下代码:

java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, Java World!");
    }
}

⚠️ 重要:文件名必须和 public class 后面的类名 完全一致(大小写也得一样),即 HelloWorld.java

Step 2: 编译

打开命令行,进入文件所在目录:

bash
javac HelloWorld.java

执行后,目录里会多出一个 HelloWorld.class 文件 —— 这就是 字节码

Step 3: 运行

bash
java HelloWorld

注意:是 java HelloWorld(不带 .class,也不带 .java)。看到输出:

Hello, Java World!

恭喜你成为 Java 程序员了! 🎉


6. 一段代码的"完整旅程"

让我们把刚才的过程再走一遍,看每一步内部到底发生了什么:

Java 编译运行流程

  1. 你写.java 源代码(人类能看懂的文本)
  2. 编译器 javac:检查语法 → 翻译成字节码 .class(机器能看懂的中间代码)
  3. 类加载器 ClassLoader:把 .class 加载到内存
  4. 字节码校验器:检查字节码合法性、没有非法操作
  5. 执行引擎:解释执行 + 即时编译(JIT),最终变成 CPU 指令运行

💡 JIT(Just In Time 即时编译):JVM 会把"经常运行的代码"编译成本地机器码,从此跑得飞快。这是 Java "虽然解释执行但性能很好"的秘密。


7. 解剖 HelloWorld 的每一个字

java
public class HelloWorld {                        // ① 定义一个公开的类,名字叫 HelloWorld
    public static void main(String[] args) {     // ② main 方法,程序入口
        System.out.println("Hello, Java World!"); // ③ 打印字符串到控制台
    }
}
元素含义现在能记多少记多少
public公开的,谁都能访问后面"封装"章节细讲
class类,Java 一切代码都得装在类里OOP 章节会讲
HelloWorld类名,首字母大写是惯例命名规范
main主方法,JVM 找它启动程序必须长这样,签名固定
static静态,不需要创建对象就能调用第8章细讲
void没有返回值方法章节
String[] args命令行参数后面会用
System.out.println标准输出打印等同 Python 的 print

🤓 小知识:为什么必须叫 main?因为 JVM 启动时,会去找 public static void main(String[] args) 这个方法作为入口,名字写错就启动失败。


8. 实战练习

打开 ./code/HelloWorld.java./code/SystemInfo.java,完成以下挑战:

练习 1:打印你的名字

修改 HelloWorld,改成打印你自己的名字。

练习 2:打印多行

让程序连续打印 3 行文字(提示:写 3 个 println)。

练习 3:查看系统信息

运行 SystemInfo.java,看看 Java 还能告诉你哪些有趣的信息。

💻 运行方式

bash
cd code
javac HelloWorld.java
java HelloWorld

9. 浏览器演示

打开 demo.html 查看本章可视化演示,包括:

  • Java 跨平台原理动画
  • JDK/JRE/JVM 关系交互图
  • 编译运行流程在线模拟

10. 面试可能会问什么?

Q1: JDK、JRE、JVM 有什么区别?

参考答案

  • JVM(Java 虚拟机):执行字节码的虚拟机,实现跨平台的核心
  • JRE(Java 运行时环境)= JVM + 核心类库(如 java.langjava.util),只能运行别人写好的 Java 程序。
  • JDK(Java 开发工具包)= JRE + 开发工具(javac 编译器、javadocjdb 调试器等),既能开发又能运行

包含关系:JDK ⊃ JRE ⊃ JVM

Q2: Java 为什么能跨平台?

参考答案:因为 Java 程序不直接编译成机器码,而是先编译成 平台无关的字节码(.class),然后由各个平台上的 JVM 把字节码翻译成本地机器指令执行。所以同一份字节码可以在 Windows、Linux、macOS 上运行,只要那个平台有对应的 JVM。

Q3: 字节码和机器码有什么区别?

对比字节码(.class)机器码
谁产生javac 编译器CPU 直接识别的二进制
谁执行JVMCPU
跨平台✅ 是❌ 否(绑定 CPU 架构)

Q4: public static void main(String[] args) 中每个关键字的含义?

  • public:访问修饰符,让 JVM 能从外部调用它。
  • static:静态的,不需要先 new 一个对象就能调用,因为 JVM 启动时还没有任何对象实例。
  • void:返回值类型为空。
  • main:固定的方法名,JVM 找它启动程序
  • String[] args:参数,接收命令行传入的字符串数组。

Q5: Java 是编译型还是解释型语言?

参考答案两者都是

  • 编译.java.class(编译型特性)
  • 解释:JVM 解释执行字节码(解释型特性)
  • 同时还有 JIT 即时编译:把热点字节码编译成本地机器码缓存起来。

所以 Java 的精确说法是 "半编译半解释 + JIT" 语言。

Q6: 一个 .java 文件能定义多个类吗?

参考答案:可以,但是:

  1. 最多只能有一个 public,且文件名必须与该 public 类同名。
  2. 其他类用 default 修饰即可(不写 public)。
  3. 编译后每个类生成一个独立的 .class 文件。
java
// HelloWorld.java
public class HelloWorld { ... }   // 文件名要叫 HelloWorld.java
class Helper { ... }              // 可以,会编译出 Helper.class
class Util { ... }                // 可以,会编译出 Util.class

🎁 本章小结

✅ Java 通过"字节码 + JVM"实现跨平台
✅ 开发用 JDK,运行用 JRE,核心是 JVM
✅ HelloWorld 三件套:写 .java → javac 编译 → java 运行
✅ main 方法是程序入口,签名固定

🔗 导航