《Java 编程入门》目录
这一页是全书的总入口。它不只列出章节标题,还给出三条可以照着走的阅读路径,以及每一节的定位说明。如果你不确定从哪开始,先读下面的「读者画像与前置知识」,再对照「学习路径」选一条;如果你已经有明确目标,可以直接跳到「分部分章节」按编号定位。
全书结构是:前置 3 篇 + 正文 18 章 54 节 + 附录 4 篇,共 61 篇。正文按学习曲线分为六个部分,每一部分解决一类问题。
如何使用本目录
这一页有三种用法,取决于你此刻的状态。
如果你刚拿到这本书,按顺序读「本书定位」「读者画像与前置知识」「学习路径」三节,用五分钟决定自己的入口章节。不要跳过这一步——Java 的入门资料遍地都是,但大部分是「片段式」的:讲一个语法、贴一段代码,然后让你自己去拼。这本书的价值在于顺序和项目语境,选错入口比读得慢更浪费时间。
如果你已经读到一半,想查某一节在哪,直接看「分部分章节」里对应部分的表格。每一行都有一句话说明,可以帮你确认是不是你要找的那一节,避免点进去再退出来的反复。
如果你把这本书当手册用,主要会用到「前置与附录」和每一节末尾的小结。附录 A 到 D 分别覆盖语法速查、标准库地图、版本差异与常见错误排查,是查阅频率最高的四篇。
本书定位
这是一本面向「已经会一门编程语言、但没有系统学过 Java」的读者的书。它的目标不是让你背下所有关键字,而是让你能独立写出一个结构清楚、能被测试、能打包运行的 Java 程序。
它有三个刻意的取舍。
第一,项目驱动,而不是语法清单。全书围绕 library(图书借阅系统)推进:卷一先做命令行版本,用内存存储;卷二把它长成 HTTP 服务;卷三拆开做并发与机制改造;卷四用同一服务做 JVM 观测。你看到的每个语法点,都会落到 library 的某个类或方法上。脱离项目语境的「Java 有八种基本类型」式罗列,本书尽量不写。
第二,示例可编译、输出是真实的。书中代码在 JDK 25 LTS(Temurin 25.0.5) 上实际编译和运行过,终端输出、报错信息都是真实结果,不是伪代码或「大致长这样」。凡是 JDK 21 与 25 行为不同的地方,会单独标注。
第三,只讲语言和标准库,不碰框架。卷一不引入 Spring、Lombok、Jackson 等依赖,目的不是排斥框架,而是先把「没有框架时你怎么把程序写对」这件事练熟。框架在《Spring Boot》三部曲里讲,本书与它是前后关系,不是替代关系。
如果你需要的是一份「30 分钟跑通 Hello World」的速成教程,第 3 章就能满足你,剩下的可以留着以后读;如果你希望一次把 Java 的地基打牢、之后不必反复回炉,那它的节奏是合适的。
读者画像与前置知识
不同类型的读者,起点和建议路径差别很大。可以先在下面找到最接近自己的那一类。
第一类:会 Python / JavaScript / Go,但没写过 Java。 你知道变量、循环、函数、类是什么,缺的是 Java 的语法细节、类型系统、集合框架和工程习惯。建议从第 1 章快速过到第 3 章,把工具链跑通,然后在第 4–12 章放慢速度,重点看泛型、集合和 Stream 的差异。并发和 JVM 可以留到卷三、卷四。
第二类:学过 Java 语法,但没写过完整项目。 你能看懂 for 循环和 class,但一让你从零搭工程就不知道从哪下手。建议跳过第 4–6 章的语法复习,从第 7 章开始,重点跟第 8–18 章的项目推进,尤其是第 13 章异常、第 16 章测试和第 17 章打包。
第三类:从 C / C++ 转过来。 你需要重点适应的是:没有手动内存管理、引用语义与值语义的边界、受检异常、泛型擦除、集合与 Stream 的抽象层次。第 4、6、11、13 章要细读,第 14 章 NIO 可以和你已有的 IO 经验对照。
第四类:只想查漏补缺。 直接看「分部分章节」的表格,按关键词跳到对应节。每节末尾都有小结和前后导航,跳读不会迷路。
前置知识只有两条:会用命令行(知道 cd、ls、环境变量),写过至少一门语言的完整程序(知道什么是函数、数组、循环)。不需要提前学 Maven、Git 或 Linux,书里会讲。
学习路径
路径一:零基础系统学(推荐,约 8 周)
| 周 | 内容 | 目标 |
|---|---|---|
| 第 1 周 | 第 1–3 章 | 装好 JDK 25 与 Maven,能编译运行第一个 library |
| 第 2 周 | 第 4–6 章 | 掌握类型、控制流、方法,能写命令分发 |
| 第 3 周 | 第 7–9 章 | 掌握类、接口、record、enum、sealed |
| 第 4 周 | 第 10–12 章 | 掌握集合、泛型、Stream,能实现搜索与统计 |
| 第 5 周 | 第 13–15 章 | 掌握异常、NIO、时间与正则,能读写数据文件 |
| 第 6 周 | 第 16–17 章 | 能写单元测试、打包可执行 jar |
| 第 7 周 | 第 18 章 | 完成 CLI + REST 的完整项目 |
| 第 8 周 | 附录 A–D + 回顾 | 查漏补缺,把项目重写一遍 |
每周投入 8–10 小时。如果时间更少,把第 7 周拉长到两周,不要跳过第 16 章的测试。
路径二:有语言基础,快速过(约 3 周)
第 1–3 章用两天跑通工具链,第 4–6 章只读小结和代码示例,第 7–12 章正常读,第 13–18 章重点跟项目。适合已经会 Python/Go、需要在一两周内接手 Java 项目的人。
路径三:查漏补缺(按需)
直接跳到你需要的章节。三个高频入口:
- 泛型看不懂 → 第 11 章。
- 集合选型拿不准 → 第 10 章。
- 异常设计混乱 → 第 13 章。
- 测试不知道从哪写 → 第 16 章。
- 打包运行报错 → 第 17 章 + 附录 D。
三条路径之外的三条提醒
- 不要跳过第 3 章。 工具链问题会伪装成语法问题,先确保
javac、java、mvn三个命令都指向 JDK 25。 - 每节代码至少手敲一遍。 复制粘贴会漏掉编译错误,而编译错误是 Java 最好的老师。
- 不要提前引入框架。 卷一的
library是故意「笨」的;等你亲手写过一遍内存仓储、参数校验和错误处理,再看 Spring 才知道它替你做了什么。
六个部分之间的依赖关系
第一部分 起步(1–3)
↓
第二部分 语言基础(4–6)
↓
第三部分 面向对象(7–9)
↓
第四部分 集合与泛型(10–12)
↓
第五部分 异常、IO 与常用库(13–15)
↓
第六部分 工程与交付(16–18)
这个顺序是有依赖的:第 10 章的集合需要第 9 章的 record 做元素类型;第 12 章的 Stream 需要第 11 章的泛型;第 18 章的完整项目需要第 8 章的接口、第 13 章的异常、第 14 章的 NIO 和第 16 章的测试。跳章可以,跳依赖不行。 如果你只想看第 18 章,至少先读第 8、9、10、13 章。
与本站 Java 专题的分工
本站的 Java 专题已经积累了约 90 篇文章,覆盖 JUC、JVM、GC 调优、Spring Boot、Spring Cloud、构建工具等单点主题。它们质量不低,但有一个共同特点:每一篇都假设你已经会 Java,然后带你在某个点上钻深。
这本书与它们的分工,靠的是顺序和项目语境。卷一的每一节都以 library 的推进为主线,语法点服务于项目:你不会看到「Java 有哪几种集合」这种脱离上下文的罗列,而会看到「图书检索该用 List 还是 Map、为什么」。也就是说,本书负责按顺序打地基,专题负责就一个问题钻到底,两者是互补关系。
需要特别说明的是并发和 JVM:卷一只写到「会用 synchronized 和线程池的基本 API」为止,JMM、AQS、虚拟线程、GC 算法、JIT 这些内容一律不写,留给卷三和卷四。如果你现在就想深挖,可以直接读本站的 Java 专题。
版本与示例约定
为了让全书保持一致的预期,这里先交代版本与示例的约定,后面每一节都默认你已经知道这些口径:
- 本书主线是 JDK 25 LTS(Temurin 25.0.5),对照线是 JDK 21 LTS。书中代码在本机 JDK 25 上实测;21 与 25 行为不同的地方会单独标注。
- 编译目标默认是 21。卷一使用的语法在 21 里都有,
maven.compiler.release=21可以产出能在 21 上运行的 class 文件;开发与运行用 25。 - 卷一原则上只用标准库。
java.base、java.logging、java.net.http、com.sun.net.httpserver足以支撑全部示例;唯一例外是第 16 章的 JUnit 5。 - 代码块都标语言:
java表示 Java 代码,bash表示命令行,text表示真实输出或报错原文,xml表示pom.xml,sql表示 SQL。 - 输出与代码分离:Java 代码块之后,紧跟着的
text代码块是这段代码在本机跑出的真实输出,不是示意。没有真实运行过的内容会明确标注「示意」。 - 不写未验证的性能数字。涉及性能的地方只给可复现的命令和测量方法,结论留给读者在自己的环境里验证。
分部分章节
第一部分:起步(第 1–3 章)
| 节 | 标题 | 一句话说明 |
|---|---|---|
| 1.1 | Java 解决了什么问题 | 字节码与 JVM 如何提供跨平台能力,边界在哪 |
| 1.2 | JDK 25 LTS 与版本节奏 | 六个月一个特性版、两年一个 LTS,怎么选 |
| 1.3 | JVM、JRE、JDK 与字节码 | 三个缩写的边界,class 文件与执行引擎 |
| 2.1 | 安装 JDK 25 | Temurin、PATH、JAVA_HOME 与版本核对 |
| 2.2 | Maven 与标准目录结构 | pom.xml、src/main/java 与资源目录 |
| 2.3 | IDE、JShell 与命令行 | 三种反馈回路各自适合什么 |
| 3.1 | Hello, Library | javac 与 java 的完整流程 |
| 3.2 | 包、模块与可见性 | 包名、访问修饰符与 JPMS 的第一印象 |
| 3.3 | Maven 生命周期 | compile、test、package 三段式 |
第二部分:语言基础(第 4–6 章)
| 节 | 标题 | 一句话说明 |
|---|---|---|
| 4.1 | 基本类型与包装类型 | 范围、默认值、装箱代价与缓存 |
| 4.2 | var、final 与类型推断 | 什么时候该用 var,什么时候不该 |
| 4.3 | 运算符、溢出与数值边界 | 整数不是数学,溢出是静默的 |
| 5.1 | if、for、while | 把流程写成可读的句子 |
| 5.2 | switch 表达式与 yield | 从语句到表达式,减少 fall-through |
| 5.3 | instanceof 模式匹配 | 类型判断不再强制转换 |
| 6.1 | 方法签名、重载与可变参数 | 重载解析顺序与可变参数的坑 |
| 6.2 | 值传递的真相 | Java 只有值传递,引用传的是引用的值 |
| 6.3 | 作用域、生命周期与栈帧 | 局部变量、块作用域与调用栈 |
第三部分:面向对象(第 7–9 章)
| 节 | 标题 | 一句话说明 |
|---|---|---|
| 7.1 | 类、字段与方法 | 对象的第一个草图 |
| 7.2 | 构造器、this 与初始化顺序 | 字段、静态块、构造器谁先执行 |
| 7.3 | 封装与不可变 | 把变化关进笼子 |
| 8.1 | 继承与 super | 复用不是目的,替代才是 |
| 8.2 | 接口、default 方法与抽象类 | 三种抽象的取舍 |
| 8.3 | 多态与动态分派 | 调用到底落到哪个实现 |
| 9.1 | record | 数据载体的最短写法 |
| 9.2 | enum | 把常量写成类型 |
| 9.3 | sealed 与模式匹配 | 把继承关系封口 |
第四部分:集合与泛型(第 10–12 章)
| 节 | 标题 | 一句话说明 |
|---|---|---|
| 10.1 | List、Set、Map | 三种容器的选择 |
| 10.2 | 复杂度与内存 | ArrayList、LinkedList、HashMap 的真实成本 |
| 10.3 | 遍历、排序与比较器 | Collections、Comparator 与稳定排序 |
| 11.1 | 泛型类与方法 | 把类型当参数 |
| 11.2 | 通配符与 PECS | extends 与 super 的取舍 |
| 11.3 | 类型擦除 | 为什么不能 new T() |
| 12.1 | Lambda 与函数式接口 | 行为也能当参数 |
| 12.2 | Stream 管道 | map、filter、reduce 与惰性 |
| 12.3 | Optional 与惰性求值 | 别把 null 包装成新问题 |
第五部分:异常、IO 与常用库(第 13–15 章)
| 节 | 标题 | 一句话说明 |
|---|---|---|
| 13.1 | 受检与非受检异常 | 异常分类的工程含义 |
| 13.2 | try-with-resources | 关闭顺序与抑制异常 |
| 13.3 | 异常转换与用户可见错误 | 内部异常怎么变成可读错误 |
| 14.1 | Path 与 Files | 比 File 更完整的文件 API |
| 14.2 | 字节流、字符流与编码 | 编码是第一道坑 |
| 14.3 | 目录遍历与 WatchService | 遍历、过滤与文件变更监听 |
| 15.1 | java.time | LocalDate、Instant 与时区 |
| 15.2 | String、StringBuilder 与文本块 | 字符串拼接的成本与文本块 |
| 15.3 | 正则表达式 | Pattern、Matcher 与 ISBN 校验 |
第六部分:工程与交付(第 16–18 章)
| 节 | 标题 | 一句话说明 |
|---|---|---|
| 16.1 | JUnit 5 | 断言、生命周期与参数化 |
| 16.2 | 测试替身 | Stub、Fake 与 Mock 的边界 |
| 16.3 | 可测试性设计 | 把依赖推到边界 |
| 17.1 | Maven 依赖、作用域与冲突 | compile、test、provided 怎么选 |
| 17.2 | 可执行 jar 与模块化 jar | jar、shade、jlink 的取舍 |
| 17.3 | 版本与可复现构建 | 依赖锁定、时间戳与构建缓存 |
| 18.1 | 需求与领域模型 | 借阅、归还、查询的边界 |
| 18.2 | 内存仓储与 CLI 交互 | 把前 17 章拼成一个可用的 CLI |
| 18.3 | 用标准库暴露 REST 接口 | com.sun.net.httpserver 与 JSON |
前置与附录
| 篇目 | 内容 |
|---|---|
| 序 | 为什么写这套书,以及它和 Spring Boot 三部曲的关系 |
| 前言 | 读者对象、写作约定、示例环境与验证方式 |
| 附录 A 语法速查 | 类型、控制流、类、泛型、异常、IO 的一页速查 |
| 附录 B 标准库地图 | java.base 常用包与类的定位 |
| 附录 C 21→25 版本差异 | 从 JDK 21 到 25 的正式特性与迁移提示 |
| 附录 D 常见编译与运行错误 | 按报错关键词查原因与处理 |
常见问题速查
「我该装 JDK 还是 JRE?」 装 JDK。从 JDK 11 起不再单独分发 JRE;生产环境也建议装 JDK,或用 jlink 裁运行时。
「JDK 25 和 21 的代码能互相跑吗?」 高版本编译的 class 不能直接在低版本 JVM 上跑。用 --release 21 可以把目标降到 21。
「为什么 mvn -version 和 java -version 不一致?」 Maven 用了另一个 JAVA_HOME。先对齐这两个值,再排查其他问题。
「卷一为什么不用 Spring?」 因为这本书要先把「没有框架时怎么把程序写对」练熟。Spring 在《Spring Boot》三部曲里讲。
「代码跑不通怎么办?」 先看附录 D 的报错关键词表;再看对应章节的「常见错误」小节;最后用 jshell 把可疑片段单独跑一遍。
「需要学 Git 吗?」 需要,但不在本书范围。你至少要知道 git clone、git status、git commit。
读完本书之后
卷一结束时,你应该能独立完成:
- 用 Maven 建一个标准 Java 工程,写
pom.xml、分模块、管依赖。 - 用
record/enum/sealed表达领域模型,用接口隔离仓储。 - 用集合、泛型、Stream 完成搜索、排序、统计。
- 用异常体系表达业务错误,用 NIO 读写数据文件。
- 用 JUnit 5 写单元测试,用 JUnit 参数化覆盖边界。
- 打出可执行 jar,知道
jlink/jpackage能做什么。
接下来可以走三条路:
- 《Java 编程实战》:把
library长成librarydHTTP 服务,引入 JDBC、连接池、JSON、日志、测试容器与容器化部署。 - 《Java 高级编程》:深入泛型擦除、反射、字节码、JMM、JUC、虚拟线程与结构化并发。
- 《Java 虚拟机原理与性能调优》:用 JFR、GC 日志、堆转储分析同一套服务。
如果只想先补框架,可以读《Spring Boot 入门》;但建议至少先完成卷一的第 8–13 章,否则很多「Spring 帮你做了」的事情会变成魔法。
小结
- 全书 61 篇:18 章 54 节 + 序/前言/目录 + 附录 A–D。
- 六个部分按依赖递进,跳章可以,跳依赖不行。
- 主线 JDK 25 LTS,编译目标 21,卷一只用标准库(第 16 章 JUnit 除外)。
library是贯穿项目:卷一 CLI,卷二服务,卷三机制改造,卷四运行时观测。- 书负责顺序和项目语境,Java 专题负责单点深度,两者互补。
- 三条路径:零基础 8 周、有基础 3 周、查漏补缺按需。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。