Java 学习路线 MOC

从零基础到可独立交付 Java 服务的系统学习路线:七个阶段、依赖关系、逐篇目录与 0 到 1 完成标准。

#type / moc #type / synthesis #status / growing #tech / dev #resource / java

[!info] related notes

Java 学习路线 MOC

这个概念为什么出现

没有依赖顺序的笔记库会制造假进度:会写 public static void main 却不懂引用与 equals,会调 Spring 却不会处理异常边界与线程池。本路线把「从零到可交付服务」拆成七个阶段,作为学习与复习的主路径

[!abstract] 路线结论 先建立“类型与对象如何在 JVM 上落地”的心智,再学继承/接口/相等性与泛型;随后把异常、资源与 IO 当成常规工程能力;并发必须连同 JMM 与线程池一起学;工程化(Maven/Gradle、测试)与 JVM 基础并行加深;最后用标准库 HTTP/JDBC 完成真实程序,框架(如 Spring)挂在应用层而不是替代语言主线。

学 Java 最怕把「语法会写」和「语言模型真正建立起来」混为一谈。整条路线围绕五个问题展开:

  1. 基本类型与引用类型如何分工,null 意味着什么
  2. 为什么面向对象默认是“类 + 接口契约”,多态如何替换实现
  3. 为什么异常是控制流,受检异常解决什么、制造什么成本
  4. 为什么并发主线是线程与内存可见性,而不是“随便 new Thread”
  5. 为什么 classpath/模块与构建工具是语言体验的一部分

如何使用这份路线

场景做法
从零开始按阶段编号顺序读;每篇先跑最小示例,再看规则与边界
已有 JS/TS 或 Python 经验可加速阶段一语法,但不要跳过引用语义、equals、异常与并发
已有 Go 经验对照值语义 vs 引用默认、error 值 vs 异常、goroutine vs 线程/虚拟线程
只抓主干看文末「8 个主干主题」和「0 到 1 完成标准」
查某一主题先定位阶段表中的文件名,再打开对应笔记;细节在原子笔记,不在本页展开

难度标记

  • L1 入门 · L2 基础巩固 · L3 核心心智 · L4 工程/并发 · L5 运行时与进阶
  • 源码:否 / 建议 / 需要 —— 是否值得对照规范、标准库或 OpenJDK 源码加深

依赖关系总图

flowchart TD
    S1["阶段一 基本认知"] --> S2["阶段二 数据与类型模型"]
    S2 --> S3["阶段三 错误、资源与 IO"]
    S3 --> S4["阶段四 并发编程"]
    S3 --> S5["阶段五 工程化开发"]
    S4 --> S5
    S5 --> S6["阶段六 JVM 与进阶"]
    S5 --> S7["阶段七 真实项目能力"]
    S4 --> S7
    S6 --> S7

箭头表示认知依赖,不表示前一阶段必须全部背完。每个阶段都应运行最小例子并观察结果。

阶段与子 MOC 对照

阶段目标主要子 MOC
建立 Java 的平台边界与程序骨架Java 语言基础 MOC · Java 工具链与构建 MOC
对象模型、接口、相等性、泛型入门Java 类型系统与 OOP MOC
异常、资源管理与 IO 抽象Java 标准库与应用 MOC
线程、同步、JUC、异步组合与 JMMJava 并发 MOC
构建、测试、质量工具与项目结构工具链 · 测试质量 · 服务工程
类加载、GC、反射与性能边界JVM 与运行时 MOC
CLI、HTTP、数据访问与服务交付Web 后端 · 数据访问 · 服务工程

阶段一:建立 Java 的基本认知

目标:能解释 Java 解决什么问题;能安装 JDK 并运行程序;理解编译/运行分离、基本类型、变量作用域、表达式、控制流与方法重载。

完成标准

  • 能从零写出带 main 的类并用 javac/java(或构建工具)验证
  • 能说明基本类型与引用类型的分工,以及局部变量必须赋值后使用
  • 能读懂方法签名、重载与 static 的基本边界
序号笔记核心问题难度源码
1.1Java 的起源与平台哲学Java 为什么这样设计,平台分层是什么L2建议
1.2安装 JDK 并运行第一个程序如何安装并跑通第一个程序L1
1.3Java 程序结构与 main类、包、main 与编译单元如何组织L1
1.4Java 基本类型与字面量基本类型如何表示值L1
1.5Java 变量与作用域局部/成员/类变量与 definitively assignedL1
1.6Java 运算符与表达式运算符、优先级、短路与数值提升L1
1.7Java 流程控制if/switch/for/while/break 如何组织控制流L1
1.8Java 方法与重载方法签名、重载解析与 staticL2
1.9使用 Scoop 安装并配置 Java 环境Windows 上如何用 Scoop 管理 JDKL1

阶段二:理解 Java 的数据与对象模型

目标:建立数组、字符串、类与对象、继承多态、接口、equals/hashCode、泛型入门与 null 模型。

完成标准

  • 能解释引用赋值共享对象,与基本类型复制的区别
  • 能用继承/接口做可替换设计,并知道何时该用组合
  • 能正确覆写 equals/hashCode,并说明契约
  • 能解释泛型主要是编译期检查 + 擦除,以及原始类型的风险
序号笔记核心问题难度源码
2.1Java 数组数组长度、协变与引用语义L2
2.2Java 字符串与字符集String 不可变、编码与常见陷阱L2
2.3Java 类与对象对象如何创建,字段与方法如何归属L2
2.4Java 字段、构造器与 this初始化顺序与构造责任L2
2.5Java 继承与多态覆盖、向上转型与动态分派L3建议
2.6Java 接口与抽象类契约、默认方法与抽象类边界L3
2.7Java equals 与 hashCode相等性契约与哈希容器L3建议
2.8Java 泛型基础类型参数、擦除与边界L3建议
2.9Java null 与 Optional空值主模型与 Optional 的正确用法L3
2.10Java Record 与数据载体(可选/后置)不可变数据载体何时用 recordL2
2.11Java 枚举enum 如何表达封闭常量集L2
2.12Java 集合框架概览List/Set/Map 心智与选用L3

阶段三:错误、资源与 IO

目标:把异常当作可设计的控制流;掌握 try-with-resources;建立字节流/字符流与 NIO 入门心智。

完成标准

  • 能区分受检/非受检异常,并设计合理抛出边界
  • 能用 try-with-resources 关闭资源且理解抑制异常
  • 能解释 InputStream/Reader 的职责分层
序号笔记核心问题难度源码
3.1Java 异常与错误处理为什么异常是主错误模型,checked 代价是什么L3
3.2Java try-with-resources资源如何与异常路径一起关闭L3
3.3Java IO 流与 Reader字节流与字符流如何组合L3建议
3.4Java NIO 概览Buffer/Channel/Path 解决什么L4建议
3.5资源生命周期与 AutoCloseable谁创建谁关闭L3

阶段四:并发编程

目标:建立线程启动、共享内存同步、线程池、异步组合与 happens-before 的完整心智。

完成标准

  • 能说明共享可变状态为何需要同步
  • 能选用合理的 Executor 与任务边界,而不是无限 new Thread
  • 能解释 volatile/synchronized 与 JMM 可见性的关系(规范层)
  • 能用 CompletableFuture 做异步组合(在理解线程池的前提下)
序号笔记核心问题难度源码
4.1Java 线程与 Runnable线程如何启动与结束L3
4.2Java synchronized 与 volatile互斥与可见性的语言层工具L4建议
4.3Java JUC 锁与原子类Lock/原子类适用边界L4
4.4Java 执行器与线程池如何限制并发并回收工作线程L4建议
4.5Java 并发集合并发容器解决什么、不解决什么L4
4.6Java CompletableFuture异步组合与异常传播L4
4.7Java 内存模型与 happens-before何时写入对其它线程可见L5需要
4.8Java 虚拟线程概览(按版本)虚拟线程改变了什么成本模型L4建议

阶段五:工程化开发

目标:把单文件练习组织成可构建、可测试、可发布的模块与服务骨架。

完成标准

  • 理解 package 可见性与依赖管理边界
  • 会用 JUnit 写可重复测试
  • 能说明项目分层与配置、日志的基本位置
序号笔记核心问题难度源码
5.1Java 包与可见性包边界与访问修饰符如何约束设计L2
5.2Java 类路径与模块系统classpath 与 JPMS 各自解决什么L3建议
5.3Maven 基础坐标、生命周期与依赖范围L2
5.4Gradle 基础任务模型与依赖声明L2
5.5Java 项目结构与分层目录与分层如何映射依赖方向L3
5.6Java 测试与 JUnit如何组织单元/集成测试L2
5.7Java 日志门面、实现与级别L2
5.8Java 配置管理配置如何注入且保持可测试L3
5.9Java 静态检查与格式化检查器与风格工具分工L2

阶段六:JVM 与进阶

目标:在语言主线稳定后,下沉到类加载、字节码、内存与 GC、反射与注解处理;明确规范 vs 实现

完成标准

  • 能描述 class 文件加载的大致阶段
  • 能说明堆/栈/方法区(元空间)等常见区域的职责级模型(实现相关要标注)
  • 能解释反射的能力与成本边界
序号笔记核心问题难度源码
6.1JVM 类加载与字节码概览类如何进入 JVM 并执行L5需要
6.2JVM 内存与 GC 概览分配与回收解决什么问题L5需要
6.3Java 反射运行时检查与调用的边界L4建议
6.4Java 注解处理概览编译期注解如何生成代码L4建议
6.5泛型擦除与可具体化边界擦除对运行时意味着什么L4建议
6.6JNI 概览(可选)与原生代码互操作的成本L5建议
6.7Java 性能方法论如何测量再优化L4

阶段七:真实项目能力

目标:用标准库与克制依赖完成 CLI/HTTP/数据访问闭环;框架作为可选加速器挂在应用层。

完成标准

  • 能完成一个可测试的 CLI 与一个最小 HTTP 服务
  • 能完成 JDBC 读写的最小闭环并处理资源关闭
  • 能说明何时引入 Spring 等框架,以及引入后仍依赖哪些语言主线能力
序号笔记核心问题难度源码
7.1使用 Java 构建 CLI如何做可测试命令行程序L3
7.2使用 Java 构建 HTTP 服务如何用 JDK HTTP 能力做可测试服务L3
7.3Java JSON 与序列化JSON 映射与空值/类型边界L2
7.4Java JDBC 与数据访问连接、语句、结果集与事务边界L4建议
7.5Java HttpClient标准 HTTP 客户端用法L3
7.6Java 请求与领域校验校验放在哪一层L3
7.7Java 认证与 JWT 概览认证如何挂在 HTTP 边界L3
7.8Java 服务优雅关闭如何排空请求并关闭依赖L4
7.9Java 可观测性指标、日志、追踪如何联动L4
7.10Java Docker 部署容器化 JVM 服务的构建与运行L3
7.11Spring Web 概览(可选框架)何时用 Spring 而不是只用 JDKL3
7.12Spring Boot(既有)约定配置与起步依赖L3

如果只抓主干,优先这 8 个主题

  1. Java 基本类型与字面量 / 变量与作用域
  2. Java 类与对象
  3. 继承与多态 / 接口与抽象类
  4. equals 与 hashCode
  5. 泛型基础
  6. 异常与错误处理
  7. 线程 / 线程池
  8. 内存模型与 happens-before

一条实用学习原则

不要把 Java 学成“背 Spring 注解和面试题清单”。先把 类型与对象、相等性、异常与资源、并发与可见性 四条主线学稳,再进入构建、测试、Web、数据库和部署。

0 到 1 的完成标准

  • 能解释引用赋值后两个变量为何可能指向同一对象
  • 能正确说明 equals/hashCode 契约,并解释放进 HashMap 的后果
  • 能设计异常边界:哪些向上抛、哪些转译、哪些记录后恢复
  • 能用线程池提交任务并说明拒绝策略/关闭流程的基本点
  • 能写 JUnit 测试并用构建工具跑通
  • 能完成 CLIHTTP 服务 最小闭环
  • 能区分“语言/JLS 保证”和“当前 HotSpot/GC 实现细节”

认知跳跃提醒(按路线可规避)

  1. 未理解引用与对象生命周期就学集合并发 → 先 2.3 / 2.9 / 2.12
  2. 未理解异常与资源关闭就上 JDBC/HTTP → 先 3.1 / 3.2
  3. 未理解同步与线程池就写“高性能异步” → 先 4.2 / 4.4 / 4.7
  4. 未测量就谈 GC 调优与反射优化 → 先 5.6 / 6.7,再 6.2 / 6.3
  5. 未完成语言主线就深陷 Spring 魔法 → 框架放阶段七,且对照 7.2 的标准库服务

相关入口

自测题

  1. 为什么并发阶段要放在异常与资源之后?
  2. 阶段六 JVM 笔记与阶段二泛型笔记应如何配合阅读?
  3. 若时间有限,优先抓哪 8 个主干主题?
答案
  1. 取消、失败传播、资源关闭是并发正确性的前置,否则线程泄漏与连接泄漏会混在一起。
  2. 先掌握语言层泛型与擦除直觉,再读字节码/反射细节;实现细节不回写为“语法永久如此”。
  3. 基本类型/变量、类与对象、继承接口、equals/hashCode、泛型、异常、线程/线程池、JMM。
创建于 2026/7/15 更新于 2026/7/15