README
# 卷二 · Java 综合案例总导读(6 案例精品版)
本卷是 卷一《Java 入门教程》 的配套实战篇。学完入门教程第 1-15 章基础语法后,通过 6 个层层递进的精品案例 把散落的知识点串起来,形成"能独立写项目"的能力。
其中第 6 个 MiniKVStore(迷你 KV 存储引擎) 是"集大成的毕业设计",一口气覆盖入门教程全部 15 章。
# 01.定位与使用方式
本卷的每一篇都按 "照着写 · 抄得懂 · 改得动" 三个层次设计:
- 照着写:每个小节先给需求、再给代码片段,初学者跟着键入即可跑通——所有代码均按"小白手把手"的步骤拆解,一步一步写、一步一步测。
- 抄得懂:代码后必有"为什么这样写 / 关键机制原理 / 新手陷阱"小节,回答"Java 为什么不能像脚本语言那样随手写"。
- 改得动:每篇结尾留 3 个"延伸挑战",鼓励读者用新学的特性重构。
代码标准:以 JDK 17 LTS 为基线,兼容 JDK 21(会明确标注
🆕 JDK 21);构建系统推荐 Maven 3.8+ 或 Gradle 7+;IDE 推荐 IntelliJ IDEA。
学习方式:建议每个案例独立创建一个 Maven/Gradle 模块,跟着教程边读边写——看一段、敲一段、跑一段。完成一个案例约需 3-18 小时(按难度递增),全部 6 个案例预计 65 小时 完成。
# 02.6 案例总览
本卷采用"业务连贯 + 技术演进"双主线设计:前 5 个案例围绕"校园 / 企业管理系统"展开,每个案例都是上一个的"自然进化";第 6 个是毕业设计,把所有能力合一。
| # | 案例 | 难度 | 时长 | 核心主题 | 入门教程前置 |
|---|---|---|---|---|---|
| 01 | 学生成绩管理系统 | ★☆☆☆☆ | 3 h | 起步:基本类型 + 数组 + 静态方法拆分 + Scanner 菜单 | 第 1-6 章 |
| 02 | 银行账户管理系统 (opens new window) | ★★★☆☆ | 8 h | OOP 进化:class 封装 + 多态(普通 / VIP / 储蓄账户)+ 异常体系 + CSV 持久化 | 第 7-10、12 章 |
| 03 | 校园身份预约系统 (opens new window) | ★★★★☆ | 10 h | 抽象身份 + 集合框架全家桶(List/Map/Set/Queue)+ 多模块包结构 + Lambda + Comparator | 第 9-11、12 章 |
| 04 | JSON 序列化器与内存数据库 | ★★★★☆ | 12 h | 现代 Java:泛型 + 递归下降解析 + 反射 + 注解 自动映射 + IO 流 + 自定义异常 | 第 10-12、14-15 章 |
| 05 | 多线程订单系统与线程池 | ★★★★★ | 14 h | 并发栈:Thread / synchronized / ReentrantLock / BlockingQueue / ExecutorService / CompletableFuture + 策略模式 | 第 11、13 章 |
| 06 | 迷你 KV 存储引擎 🎓 | ★★★★★ | 18 h | 毕业设计:命令模式 + AOF 持久化 + 读写锁 + 守护线程 TTL + 注解扫描命令 + 自定义线程池 + 内置单测 | 第 1-15 全章 |
🎓 第 6 个案例是"毕业设计"——前 5 个案例每个聚焦一个技术栈,第 6 个把所有能力合并为一个工业级 KV 数据库。
# 03.章节—案例覆盖矩阵(100% 全覆盖自检)
下表展示入门教程每章在本卷的落地点。读者可反向使用——"我想练习反射,去找第 04 案例"。
| 入门章节 | 核心知识点 | 主覆盖案例 | 辅助覆盖 |
|---|---|---|---|
| 01 基础语法 | package/import、访问控制、static/final | 01 | 全部 |
| 02 数据类型 | 8 种基本类型、包装类、自动装箱 | 01 | 02、04 |
| 03 运算符 | 算术 / 逻辑 / 位运算、instanceof | 01 | 02(业务运算)、05(位标记) |
| 04 字符串和数组 | String 不可变、StringBuilder、二维数组 | 01 | 03、04(JSON 解析) |
| 05 流程语句 | switch 字符串匹配、增强 for | 01 | 全部 |
| 06 函数方法 | 重载、可变参数、值传递、递归 | 01 | 04(递归解析)、05(Lambda 任务) |
| 07 类和对象 | 封装、构造方法重载、this/static | 02 | 03、04、06 |
| 08 继承和多态 | 抽象类、@Override、向上 / 向下转型 | 02 银行三态 / 03 身份三态 / 06 命令模式 | 04(JSON 节点) |
| 09 接口和抽象类 | default 方法、Comparable/Comparator | 03(Comparator 排序) | 04(Visitor)、05(Runnable) |
| 10 异常处理 | 受检 / 非受检异常、自定义异常体系、try-with-resources | 02 / 04(异常体系)/ 06(KvException) | 05 |
| 11 集合框架 | ArrayList/HashMap/TreeMap/LinkedHashMap/PriorityQueue | 03(集合全家桶) | 04、05、06 |
| 12 IO 流和 File | File、字节流 / 字符流、BufferedReader、Files.readAllLines | 02 CSV / 04 JSON 文件 | 06 AOF 重放 |
| 13 线程和锁 | Thread/Runnable、synchronized、ReentrantLock、ExecutorService | 05 | 06(ReadWriteLock 多读单写) |
| 14 泛型 | 泛型类 / 方法、通配符 ? extends/? super、类型擦除 | 04(JsonValue<T> / Repository<T>) | 03、05、06 |
| 15 注解和反射 | @interface、Class.forName、Field/Method 反射调用 | 04(@JsonField 注解扫描)/ 06(@Command 自动注册) | — |
✅ 表中加粗的是"该章的首选案例",新手可按此顺序学。所有 15 章全部有主覆盖案例,无遗漏。
# 04.推荐学习路径
# 路径 A:新手线(按顺序通读,强烈推荐)
01 学生成绩(基本语法起步,3 h)
↓ 升级为 class + 多态 + 异常 + 文件
02 银行账户(OOP 大考,8 h)
↓ 抽象身份 + 集合框架
03 校园预约(集合全家桶,10 h)
↓ 加泛型 + 反射 + 注解
04 JSON + 内存数据库(现代 Java,12 h)
↓ 加并发能力
05 多线程订单 + 线程池(并发栈,14 h)
↓ 集大成
06 MiniKVStore(毕业设计,18 h)
2
3
4
5
6
7
8
9
10
11
总耗时约 65 小时,相当于:每天 2 小时 × 33 天 / 周末全天 × 8 周。
# 路径 B:转 Java 的程序员(按主题跳读)
OOP 主题: 02(多态三态)→ 03(抽象身份)→ 06(命令模式)
泛型反射主题: 04(注解 + 反射映射)→ 06(注解扫描命令)
并发主题: 05(synchronized/ReentrantLock/线程池)→ 06(ReadWriteLock)
工程主题: 04(异常体系)→ 05(线程池组件)→ 06(注解 + 单测)
2
3
4
# 路径 C:快速查漏(按入门章节反查)
| 想练 | 去看哪个案例 |
|---|---|
| 多态 / 抽象类 | 02、03、06 |
| 集合框架 | 03、06 |
| 泛型 + 反射 + 注解 | 04、06 |
| 异常体系 | 02、04、06 |
| 多线程并发 | 05、06 |
| IO 流和持久化 | 02、04、06 |
| 一次性串完入门所有章节 | 直接做 06 |
# 05.案例间承接关系(业务 + 技术双线)
01 学生成绩(基本语法 + 数组)
│
│ 痛点:"数据存内存就够了吗?" → 数据要持久化
│ 痛点:"一组数组怎么表达多种角色?" → 需要继承
▼
02 银行账户管理(class + 多态 + 异常 + CSV)
│
│ 痛点:"三种账户的类还能怎么扩展?" → 抽象身份接口
│ 痛点:"手动 for 循环 find 太低效?" → 用集合框架 HashMap/TreeMap
▼
03 校园身份预约(多态 + 集合全家桶)
│
│ 痛点:"CSV 太死板,能存嵌套数据吗?" → 需要 JSON
│ 痛点:"手写 setXxx 一百遍?" → 反射 + 注解自动映射
▼
04 JSON 序列化器 + 内存数据库(泛型 + 反射 + 注解)
│
│ 痛点:"单线程访问太慢?" → 加并发
│ 痛点:"多个线程同时改怎么办?" → 锁 + 同步原语
▼
05 多线程订单系统 + 线程池(并发栈)
│
│ 痛点:"想把所有能力合一做一个真实产品?" → 毕业设计
▼
06 MiniKV 存储引擎(入门 15 章全章串联)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 06.统一的写作约定
为保证 6 个案例"看起来像一本书",本卷遵循以下统一约定:
# 6.1 每篇结构模板
# NN.案例名
> 上一案例的痛点 → 本案例如何解决(一句话)
## 00.案例元信息
- 难度:★★★☆☆
- 预估时长:X 小时
- 前置章节:入门第 X/Y/Z 章
- 覆盖知识点:(矩阵表)
- 项目结构:(包结构树)
- 编译运行命令:(一条命令跑通)
- 学习路径建议:(边读边写的 6 个阶段)
## 01.需求说明
(需求 / 功能 / 设计思路 / 涉及知识点)
## 02.菜单或主框架
(先搭骨架,让程序能跑起来)
## 03~0N.分步骤实现
(每个功能:需求 → 代码 → 测试 → 原理 → 陷阱)
## 0N.项目总结
- 代码整体结构
- 核心原理
- 优缺点分析
## 0N+1.项目技术思考
(本案例最值得思考的 2-3 个问题)
## 0N+2.衔接与延伸
- 与上一案例的差异(对比表)
- 下一案例的递进点
- 3 个延伸挑战(基础 / 进阶 / 现代化)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 6.2 教学高峰约定
每个案例必含 3 类教学高峰,与 C++ 模版完全一致:
| 高峰类型 | 标记 | 出现节奏 |
|---|---|---|
| 🤔 灵魂三问 | 关键设计决策前的"为什么这样做"对比反例 | 每个案例 ≥ 3 处 |
| ⚠️ 故意造 BUG → 修复 | 先写错,看现象,再修对 | 每个案例 ≥ 1 处(05/06 ≥ 3 处) |
| 📌 阶段小结卡 + 章节回扣表 | 每完成一个 Step 阶段后做章节对应 | 每阶段 1 处 |
# 6.3 代码风格
| 项目 | 约定 |
|---|---|
| 命名 | 类 PascalCase、方法 / 变量 camelCase、常量 UPPER_SNAKE |
| 包结构 | 案例 01 单包;案例 02 起按 entity / service / dao / cli 分包 |
null 处理 | 案例 01-02 用 if (x == null);案例 04 起优先用 Optional<T> |
| 资源管理 | 全部用 try-with-resources;禁止裸 close() |
| 标准 | 基线 JDK 17;用到 JDK 21 特性会标注 🆕 JDK 21(如虚拟线程) |
| 错误处理 | 用户输入校验用返回布尔 / Optional;资源 / 解析失败用异常 |
| 日志 | 案例 01-04 用 System.out / System.err;案例 05 起切换到 java.util.logging 或自写 Log 静态类 |
# 6.4 术语统一
| 术语 | 本卷统一译法 |
|---|---|
| field | 成员变量 / 字段(不用"属性",避免和 JavaBean 概念混) |
| method | 方法(不用"函数") |
| instance | 对象(不用"实例",除了集合泛型章) |
| reference | 引用(不用"指针") |
| constructor | 构造方法(不用"构造函数",与官方文档一致) |
# 07.常见疑问 FAQ
Q1:为什么从旧版 9 个案例精简为 6 个?
A:旧 9 个案例存在三组重复——"01 学生 + 03 职工"都是基础 OOP+CSV,"05 演讲 + 06 机房 + 07 票务"都是集合框架+文件,"08 轮询 + 09 线程池"都是并发。精简后每个案例只聚焦一个核心技术栈,认知负担减轻,章节覆盖反而更完整(从 12/15 提升到 15/15)。
旧 9 个案例已归档到 99.附录练习/,作为对应章节的散点小练保留。
Q2:6 个案例之间能跳着学吗?
A:前 5 个建议按顺序学,因为存在数据 / 技术承接关系(如案例 02 的 Account 类会在案例 03 升级为 User 抽象基类、案例 04 用反射重构案例 03 的手写 setXxx)。第 6 个毕业设计可以等前 5 个学完后再做,体感会有"原来如此"的爽感。
Q3:为什么案例 01 仍然用静态方法 + 二维数组,不用 OOP?
A:入门第 7 章(类和对象)才讲到 class,前 6 章只有"类型 / 数组 / 静态方法"。01 故意保留"过程式 Java"作为历史对照,让读者在 02 看到"类化"后的同一问题,体会封装的价值。
Q4:为什么案例 02、03 还在手写 setXxx 一百遍?
A:这两个案例的主题是多态和集合(入门 8/11 章),此时还没学到反射(第 15 章)。我们保留手写 setter 版本,等案例 04 再统一升级为 @JsonField 注解 + 反射自动映射,让读者亲眼看到"同一份代码,反射版本少了多少行 setXxx"。
Q5:第 6 个 MiniKVStore 和前 5 个是什么关系?
A:前 5 个每篇覆盖入门教程 2-4 章,是"专题练习";第 6 个是毕业设计——一个项目把入门教程 15 章串起来。它不是"加难度",而是"换视角":从"练单点"切到"做系统"。建议分 5 次会话(每次 3-4 小时)完成,分别对应 MVP / 命令模式 + 反射注册 / 异常 + 持久化 / 并发 + TTL / 单元测试。
Q6:为什么不一上来就用 Spring Boot?
A:Spring 是框架的使用者视角,本卷追求框架的实现者视角——你必须先理解"反射如何注入"、"线程池如何调度"、"AOF 如何重放",再去用 Spring 才不会成为"配置工程师"。学完本卷再看 Spring 源码,会有"这不就是案例 04 的注解扫描 + 案例 06 的命令模式吗"的顿悟。
Q7:完成 6 个案例后我的水平能到哪?
A:参考下方"学习效果检验标准"——具备阅读开源 Java 项目(如 Redis Java client、HikariCP)的能力,能独立开发中小型 Java 应用,可以无缝进入 Spring Boot / 微服务 / JVM 调优等进阶学习。
# 08.学习效果检验标准
完成本卷 6 个案例后,你应该能够:
✅ 基础能力
- 熟练使用 JDK 17 核心特性(var / Lambda / Stream / Optional /
record类) - 理解面向对象设计原则(封装 / 继承 / 多态 / 接口编程)
- 掌握集合框架组合(ArrayList / HashMap / TreeMap / 自定义 Comparator)
✅ 工程能力
- 设计可维护的多包项目架构(entity / service / dao / cli 分层)
- 实现多线程安全程序(synchronized / ReentrantLock / ConcurrentHashMap / ExecutorService)
- 使用反射 + 注解构建轻量级框架雏形(注解扫描 / 自动注册 / 自动映射)
✅ 系统思维
- 从需求分析到代码实现的全流程能力
- 异常体系设计(受检 vs 非受检 / 自定义异常层级)
- 并发安全意识(竞态 / 死锁 / 可见性 / 原子性)
✅ 进阶准备
- 为学习 Spring Boot / 微服务打下基础(理解依赖注入和线程池调度的本源)
- 具备阅读开源 Java 项目(如 HikariCP / Caffeine / Disruptor)的能力
- 能够独立开发中小型 Java 应用,无缝进入 JVM 调优 / 并发底层等进阶学习
# 09.与其他卷的衔接
- 入门教程(卷一):本卷是它的验收考。做不动的话回头复习对应章节。
- 专栏博客:本卷案例 05 的并发只做到"够用";想看 JMM 内存模型 / 锁升级 / volatile 原理 / 虚拟线程,去专栏博客对应章节。
- 数据集合源码篇:本卷案例 03、06 频繁用到
HashMap/LinkedHashMap/ConcurrentHashMap;想看它们的源码设计思想,去03.数据集合/目录。
# 10.反馈
发现 bug、想法、希望增加的案例?欢迎到仓库提 Issue。祝你在 6 个案例里找到"会 Java"的那一刻。
特别提示:建议在学习过程中为每个案例创建独立的 Git 分支,记录自己的实现过程和思考。完成所有案例后,你将拥有一个展示你 Java 技能成长的完整作品集。