编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • C语言入门精通

  • Cpp入门到精通

  • Java入门精通

    • README
    • 入门教程

    • 综合案例

      • README
        • 01.定位与使用方式
        • 02.6 案例总览
        • 03.章节—案例覆盖矩阵(100% 全覆盖自检)
        • 04.推荐学习路径
          • 路径 A:新手线(按顺序通读,强烈推荐)
          • 路径 B:转 Java 的程序员(按主题跳读)
          • 路径 C:快速查漏(按入门章节反查)
        • 05.案例间承接关系(业务 + 技术双线)
        • 06.统一的写作约定
          • 6.1 每篇结构模板
          • 6.2 教学高峰约定
          • 6.3 代码风格
          • 6.4 术语统一
        • 07.常见疑问 FAQ
        • 08.学习效果检验标准
        • 09.与其他卷的衔接
        • 10.反馈
      • 学生成绩管理系统
      • 银行账户管理系统
      • 校园身份预约系统
      • Json与内存数据库
      • 订单票务购买系统
      • 迷你KV存储引擎器
    • 专栏博客

  • Go入门到精通

  • JavaScript入门

  • CodeX
  • Java入门精通
  • 综合案例
杨充
2026-04-07
目录

README

# 卷二 · Java 综合案例总导读(6 案例精品版)

本卷是 卷一《Java 入门教程》 的配套实战篇。学完入门教程第 1-15 章基础语法后,通过 6 个层层递进的精品案例 把散落的知识点串起来,形成"能独立写项目"的能力。

其中第 6 个 MiniKVStore(迷你 KV 存储引擎) 是"集大成的毕业设计",一口气覆盖入门教程全部 15 章。


# 01.定位与使用方式

本卷的每一篇都按 "照着写 · 抄得懂 · 改得动" 三个层次设计:

  1. 照着写:每个小节先给需求、再给代码片段,初学者跟着键入即可跑通——所有代码均按"小白手把手"的步骤拆解,一步一步写、一步一步测。
  2. 抄得懂:代码后必有"为什么这样写 / 关键机制原理 / 新手陷阱"小节,回答"Java 为什么不能像脚本语言那样随手写"。
  3. 改得动:每篇结尾留 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)
1
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(注解 + 单测)
1
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 章全章串联)
1
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 个延伸挑战(基础 / 进阶 / 现代化)
1
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 技能成长的完整作品集。

上次更新: 2026/06/10, 11:13:41
注解和反射
学生成绩管理系统

← 注解和反射 学生成绩管理系统→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式