跳到主要内容

创建日期:2026-09-08 | 最近更新:2026-09-08 本手册按 JDK 11(本机实测可跑)为主线编写;涉及 17/21+ 才有的新特性会单独标注「需更高 JDK」。

Java 复习手册 0:认识 Java,先把「怎么跑起来」刻进脑子

这是给「学过几次但总记不住」的你的速记手册。每篇都很短,只留「再忘就回来翻」的东西。别背,

1. Java 到底是怎么运行的

一句话:Java 先把 .java 源码编译成 .class(字节码),再由 JVM 逐行解释/即时编译执行

Hello.java --(javac 编译)--> Hello.class --(java 运行)--> JVM 执行,跨平台
  • JDK:写 Java 的人装的整套(含编译器 javac + 运行时 JRE);
  • JVM:执行字节码的「虚拟机」——所以同一份 .class 能在 Windows/macOS/Linux 跑;
  • 版本:主流长期支持版是 8 / 11 / 17 / 21。别追新,项目说几就用几;本手册按 11 写。

2. 你的第一个程序(三行规则)

Java 规定:文件名必须和 public 类同名,程序入口长这样(几乎每个文件都要抄):

// Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("你好,Java");
}
}

跑三步(或 IDE 里点运行按钮):

javac Hello.java # ① 编译 → 生成 Hello.class
java Hello # ② 运行(不带 .class 后缀)
# 输出:你好,Java

最容易忘的四件事(写错 90% 都是这四条):

  1. 类名 Hello 与文件名 Hello.java 完全一致(大小写敏感);
  2. main 签名是死的:public static void main(String[] args),一个都不能少;
  3. 每条语句以 分号 ; 结尾;
  4. 字符串用双引号 "你好"(单引号是字符,见下篇)。

3. package 与 import:Java 的「文件夹 + 引用」

  • package com.example.demo;:声明这个类属于哪个包(类似文件路径)。包名习惯反写域名。
  • import java.util.List;:要用别包的类就先 import(类似「引入」)。java.lang 下的类不用 import(如 StringSystem)。
  • 目录结构要跟 package 对应:com/example/demo/Hello.java
package com.example.demo; // 放第一行(注释前可空)

import java.util.ArrayList; // 引入 ArrayList

public class Hello {
public static void main(String[] args) {
var list = new ArrayList<String>(); // 见下篇「类型推断」
}
}

var(JDK 10+):让编译器帮你猜类型,但只是「少打字」,类型仍然有。别到处用,可读性第一。

4. 装环境(你有两种路子)

# 路子 A:sdkman(推荐,方便切版本)
curl -s "https://get.sdkman.io" | bash
sdk install java 11.0.24-tem # 安装某个 JDK
sdk use java 11.0.24-tem # 当前 shell 用它

# 路子 B:macOS 用 Homebrew
brew install --cask temurin@11 # 或 temurin@21

验证:java -versionjavac -version 都出来就对了。

5. 写起来舒服的姿势

  • 小练习:文本编辑器 + 命令行 javac/java 够了;
  • 认真学/做项目:装 IntelliJ IDEA(社区版免费)——新建工程、点运行、断点调试,省掉所有命令行痛苦;
  • IDEA 里右键 Run 之前,先确认右下角选的 Project SDK 是你要的 JDK。

6. 怎么用这本手册

每篇结构都一样:核心概念 → 代码示例 → 「最容易忘」→ 动手 3 分钟 → 自测 5 题

  • 今天先做到:能自己打出 HelloWorld 并跑通
  • 下一篇:基础语法与流程控制——变量、类型、运算符、if/for/while。

自测

  1. .java.class 分别是什么阶段产生的?
  2. main 方法签名必须怎么写?
  3. 文件名和 public class 名不一致会怎样?
  4. package 声明的意义是什么?
  5. JVM 存在的意义是什么?