Java 从入门到精通 · 个人学习仓库
已有基础语法底子,重点进修进阶特性(集合 / 泛型 / 并发 / 现代特性等)。 学一课、写一课、测一课、归档一课。
| 项 | 版本 |
|---|---|
| Java 工具链 | JDK 25 |
| Gradle | 9.6.1(Kotlin DSL + version catalog) |
| 测试框架 | JUnit Jupiter 6.0.1 |
| 第三方库 | Guava 33.5.0-jre |
app/src/main/java/learning/pra/
├── App.java # 入口(Gradle init 模板)
├── collections/ # 集合地基:List / Set / Map / 不可变集合
│ └── ListLab.java
├── generics/ # 泛型:类型参数 / 边界 / PECS / 擦除 / 泛型进阶实战
│ ├── GenericsLab.java
│ └── GenericPecsLab.java
├── stream/ # Stream:filter/map/collect/groupingBy / 进阶收集器
│ ├── StreamLab.java
│ └── StreamAdvLab.java
├── modern/ # 现代特性:Records / Sealed / Pattern Matching switch
│ ├── ModernLab.java
│ └── VehicleLab.java # 第十六课:Sealed 三层层级(进行中)
├── concurrent/ # 并发:Thread / synchronized / Atomic / CompletableFuture
│ └── ConcurrencyLab.java
├── exceptions/ # 异常体系:受检/非受检 / try-with-resources / 异常链
│ ├── ExceptionLab.java
│ └── ConfigException.java
├── io/ # IO:字符/字节流 / 装饰器 / Scanner·PrintWriter
│ └── IoLab.java
├── nio/ # NIO 块式 IO:Path / Files / ByteBuffer
│ └── NioLab.java
├── reflection/ # 反射:Class / Field / Method / Constructor 三剑客
│ └── ReflectionLab.java
├── annotations/ # 注解:内置 / 元注解 / 自定义 / 反射实战
│ ├── AnnotationsLab.java
│ └── ValidatorLab.java
├── enums/ # 枚举:本质 / EnumSet·EnumMap / 策略模式实战
│ └── EnumLab.java
├── time/ # java.time:LocalDate / ZonedDateTime / 格式化
│ └── DateLab.java
└── optional/ # Optional 深入:map/flatMap/orElse 链式取值
└── OptionalLab.java
app/src/test/java/learning/pra/ # 测试与源码同包(各包同构)
├── collections/ListLabTest.java
├── generics/GenericsLabTest.java
├── generics/GenericPecsLabTest.java
├── stream/StreamLabTest.java
├── stream/StreamAdvLabTest.java
├── modern/ModernLabTest.java
├── concurrent/ConcurrencyLabTest.java
├── exceptions/ExceptionLabTest.java
├── io/IoLabTest.java
├── nio/NioLabTest.java
├── reflection/ReflectionLabTest.java
├── annotations/AnnotationsLabTest.java
├── annotations/AnnotationsLabLabelTest.java
├── annotations/ValidatorLabTest.java
├── enums/EnumLabTest.java
├── time/DateLabTest.java
└── optional/OptionalLabTest.java
docs/ # 每日学习笔记(知识点 + 真实坑 + 待补强项)
├── 00-learning-roadmap.md # 全程学习路线总览
├── day1-learning-notes.md ~ day13-learning-notes.md
gradle/libs.versions.toml # 依赖版本集中管理
完整路线见 docs/00-learning-roadmap.md。当前进度:已完成 15 课(Day1-12),进行中为第十六课「现代特性速览」(Records ✅ / Sealed 深入)。
graph LR
A[1. 集合] --> B[2. 泛型]
B --> C[3. Stream]
C --> D[4. 现代特性入门]
D --> E[5. 并发基础]
E --> F[6. 异常]
F --> G[7. IO 流]
G --> H[8. 反射]
H --> I[9. 注解]
I --> J[10. 枚举]
J --> K[11. java.time]
K --> L[12. Optional]
L --> M[13. 泛型进阶实战]
M --> N[14. Stream 进阶]
N --> O[15. NIO]
O --> P[16. 现代特性速览]
P --> Q[17. 并发进阶]
Q --> R[18. 综合实战 IoC]
./gradlew test # 运行全部测试
./gradlew test --tests <Class> # 运行单个测试类
./gradlew run # 运行 App
./gradlew build # 完整构建
./gradlew javadoc # 生成 javadoc 文档
./gradlew --version # 查看 wrapper / JDK 版本沙箱环境若
~/.gradle只读导致 wrapper 失败,可用系统gradle:gradle test --no-daemon --gradle-user-home="$TMPDIR/gradle-home"
- 教学模式:每个主题先讲概念 -> 自己写实现 -> 自己写测试 -> 用
gradle test校验。 - 一课一包:每个主题独立成包(
collections/、generics/…),不互相依赖。 - 现代特性优先:JDK 25 环境下,遇到 Records / Pattern Matching / Sealed Classes / Virtual Threads / Switch Pattern 等,优先展示现代写法。
- 显式类型:优先显式类型声明(
List<Thread> threads = ...),不用var,强化泛型/集合认知。
- 第一课:集合框架(ListLab)- 去重 / 反转 / 频率 / max / 不可变集合
- 第二课:泛型(GenericsLab)- 类型参数 / 上界 / PECS / 类型擦除 / Stack 泛型类
- 第三课:Stream(StreamLab)- filter/map/collect/groupingBy/Optional
- 第四课:现代特性入门(ModernLab)- lambda / 方法引用 / 函数式接口
- 第五课:并发基础(ConcurrencyLab)- Thread / synchronized / volatile / wait·notify,7 测试
- 第六课:异常体系(ExceptionLab / ConfigException)- 受检/非受检 / try-with-resources / 异常链,11 测试
- 第七课:IO 流(IoLab)- 字节/字符流 / 装饰器 / Scanner·PrintWriter,15 测试
- 第八课:反射(ReflectionLab)- Class / Field / Method / Constructor 三剑客,24 测试
- 第九课:注解(AnnotationsLab / ValidatorLab)- 内置注解 / 元注解 / 自定义注解 / 表单校验器实战,20 测试
- 第十课:枚举(EnumLab)- 本质 / 字段构造器 / EnumSet·EnumMap / 策略模式实战,56 测试
- 第十一课:
java.time(DateLab)- LocalDate / ZonedDateTime / Duration·Period / DateTimeFormatter - 第十二课:
Optional深入(OptionalLab)- map / flatMap / orElse / 嵌套安全取值 - 第十三课:泛型进阶实战(GenericPecsLab)- PECS / 类型擦除 workaround / 泛型数组
- 第十四课:Stream 进阶(StreamAdvLab)- groupingBy / partitioningBy / 自定义 Collector
- 第十五课:NIO(NioLab)- Path / Files / ByteBuffer / 便捷读写,8 测试
进行中 / 未完成(详见 学习路线)
- [~] 第十六课:现代特性速览(Records ✅ / Sealed 进行中 / Pattern Matching / Switch Pattern / Text Blocks)
- 第十七课:并发进阶(ReentrantLock / CompletableFuture / Virtual Threads)
- 第十八课:综合实战 -- 微型 IoC 框架
详细的每日学习总结(知识点 + 真实坑 + 待补强项)见 docs/ 目录:
| 笔记 | 日期 | 内容 |
|---|---|---|
| 00 路线总览 | 08-05 | 全程学习路线 + 薄弱点识别 + 节奏建议 |
| day1 | 07-31 | 集合 / 泛型 / Stream / 现代特性 |
| day2 | 08-01 | 并发与多线程 |
| day3 | 08-02 | 异常体系 |
| day4 | 08-03 | IO 流体系 |
| day5 | 08-04 | 反射 |
| day6 | 08-05 | 注解(含表单校验器实战) |
| day7 | 08-06 | 枚举(含策略模式实战) |
| day8 | 08-07 | java.time 日期时间 |
| day9 | 08-08 | Optional 深入 |
| day10 | 08-09 | 泛型进阶实战 |
| day11 | 08-10 | Stream 进阶 |
| day12 | 08-11 | NIO 与现代 IO |
| day13 | 08-12 | 现代特性速览(Records / Sealed) |
- 包名使用
learning.pra,不要用java.*开头(JDK 9+ 模块系统会抛Prohibited package name)。 - 沙箱
/tmp只读,测试需临时文件时写到 workspace 内build/tmp/(见测试代码)。