Skip to content

Repository files navigation

java-pra

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]
Loading

常用命令

./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,强化泛型/集合认知。

进度

已完成(15 课)

  • 第一课:集合框架(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.timeDateLab)- 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/(见测试代码)。

About

个人Java练习项目

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages