# java25book **Repository Path**: gaowy/java25book ## Basic Information - **Project Name**: java25book - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-11 - **Last Updated**: 2026-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java25book —《On Java 25》项目 一本**只包含 JDK 25+ 语法与标准库**的 Java 书:不使用任何旧语法、不使用任何旧库。 ## 目录 | 文件 | 内容 | |---|---| | `OUTLINE.md` | 全书大纲:口径定义、3 卷 37 章(每章含小节、`[25新]`/`[基线]`/`[25预览]` 标签、禁用清单、练习)、写作路线图与风险 | | `APPENDICES.md` | 附录 A–N:旧语法→现代写法对照总表、JDK 25 全部 18 个 JEP 速查、版本—特性矩阵、预览开关与版本敏感清单、与《On Java》章节对照、已移除特性、以及 8 个专题附录 | | `PROMPT.md` | 续写提示词(可直接粘给新会话的 AI) | | `PROGRESS.md` | **进度台账**:逐章状态、每章产出明细与事实双证表、遗留 `[待复核]`、变更记录 | | `book/vol1|vol2|vol3/` | 正文:`NN-英文短名.md` | | `book/appendix/` | 附录正文:`A-legacy-map.md` … `N-glossary.md` | | `samples/chNN/` | 每章配套可运行代码(文件名与正文示例一致) | ## 当前进度 以 `PROGRESS.md` 为准(本文件不重复维护)。截至最近一次变更:**2/37 章已验证**(第 1、3 章),`samples/` 13 个示例全部通过严格守门编译。 ## 正文目录(章节编号与标题以 `OUTLINE.md` 为准) **第一卷 语言与数据建模(1–13)**:1 三行程序:紧凑源文件、实例 main 与 IO · 2 现代 Java 工具链与项目形态 · 3 一切皆对象,但不必写类 · 4 运算符、数值与类型转换 · 5 控制流与 switch 表达式 · 6 record:以数据为中心的建模 · 7 构造、初始化与资源生命周期 · 8 封装、包与 API 边界 · 9 接口、抽象类与密封层次(ADT) · 10 嵌套类型与匿名类的现代替代 · 11 泛型 · 12 枚举与代数数据类型 · 13 注解与元数据 **第二卷 数据管道与并发(14–27)**:14 集合与序列(Sequenced Collections) · 15 数组、可变参数与批量数据 · 16 函数式编程 · 17 Stream、Collector 与 Gatherer · 18 异常、错误与资源安全 · 19 字符串、文本块、正则与格式化 · 20 数值计算、日期时间与随机数 · 21 文件与 I/O · 22 网络与 HTTP · 23 并发基础:虚拟线程 · 24 结构化并发 · 25 作用域值与不可变上下文 · 26 共享可变状态:同步、原子与异步组合 · 27 惰性初始化与稳定值 **第三卷 平台、元编程与工程(28–37)**:28 模块系统与依赖边界 · 29 反射、方法句柄与 Class-File API · 30 本地互操作与堆外内存(FFM) · 31 安全、密码学与后量子算法 · 32 日志、可观测性与诊断 · 33 JVM、GC 与性能工程 · 34 测试、校验与"反旧语法"守门 · 35 设计模式在 JDK 25 的重写 · 36 从原型到交付:TaskFlow 全流程 · 37 演进中的 Java:预览政策与 26+ **附录**:A 旧语法/旧库→现代写法对照总表 · B JDK 25 的 18 个 JEP 速查 · C 版本—特性矩阵 · D 预览/孵化/实验开关 · E 与《On Java》章节对照 · F 已移除/已撤销特性 · G 压缩与归档 · H 序列化 · I `equals`/`hashCode` 与 record 契约 · J 位运算、进制与字节 · K Markdown 文档注释与 `javadoc` · L 对象传递与不可变性 · M 集合实现细节与复杂度 · N 术语表 ## 本书的三条铁律 1. **编译基线唯一**:所有示例 `javac --release 25` 通过,运行在 JDK 25 LTS 上;预览章节显式标注 `--enable-preview`。 2. **正文零旧语法**:旧写法只允许出现在可整段删除的"考古侧栏"与附录 A 对照表中,绝不作为教学内容出现。 3. **事实双证**:每个 API/标志的陈述以 openjdk.org JEP 原文 + 本机 JDK 25 实测为准;每条都标注来源与复核状态。 ## 口径要点(详见 `OUTLINE.md` 第 0 部分) - `[25新]`:JDK 25 本轮定稿(18 个 JEP)。 - `[基线]`:JDK 9–24 已定稿、构成今日语法主体的特性(record、sealed、模式匹配、switch 表达式、var、文本块、虚拟线程、模块系统……)。本书把它们当作"**现在的语法**"直接使用,而非"新特性介绍";其定稿版本见附录 C。 - `[25预览]`/`[25孵化]`/`[25实验]`:预览与孵化内容集中在指定章节,并通过适配层与其他章节解耦。 - 净版 / 考古侧栏两种排版口径,后者可整段删除而不影响正文。 ## 全书代码规范(12 条,等价于"无旧库"契约) 入口 `void main()` · 控制台 `IO.*` · 数据 `record` · 分派 `sealed` + 模式匹配 · 集合 `List.of` + Sequenced · 时间 `java.time` · 文件 `Path`/`Files` + 显式 UTF-8 · 网络 `HttpClient` · 并发 虚拟线程 + `StructuredTaskScope` + `ScopedValue` · 本地互操作 FFM API · 日志 `System.Logger` + JFR · CI 用 `--release 25 -Xlint:all -Werror` + `jdeprscan` + `jdeps --jdk-internals` 守门。 ## 事实来源(写作时逐条回链) - JDK 25 特性总表(18 个 JEP): - JDK 21 以来全部 JEP(含定稿/预览/弃用/移除): - JDK 25 语言变更官方说明: - 逐条 JEP 原文(本大纲已核对 505/502/512/513/519/521 等多篇): - 官方速览: - 结构参考:《On Java 8》中文版目录(25 章 + 12 附录),附录 E 给出逐章映射。 ## 已核对的"易错点"(写作时不要写错) - `IO.println` 必须带 `IO.` 限定——25 定稿**取消**了 `IO` 静态方法的隐式导入(23 预览期曾自动导入)。 - **源码启动器(`java Xxx.java`)不能当验收标准**:JDK 25 上它漏掉了"实例 main 所在类的零参构造器必须非私有"这项检查(缺陷 JDK-8371470,26 b27 修复)。验收一律用 `javac --release 25 -Xlint:all -Werror` + `java`。 - 紧凑源文件里,字段与方法成为隐式声明类的**成员**,不是局部变量。 - 启动协议:优先选 `main(String[])`,其次 `main()`;实例 main 需要非私有零参构造器。 - `readln()` 在**输入结束(EOF)时返回 `null`**,空行返回 `""`——两者必须区分。 - 灵活构造器的序言中:不能读 `this`、不能用 `super.字段/方法`,但**可以**给"没有初始化器的本类字段"做简单赋值。 - 紧凑对象头在 25 只是**转为正式特性、默认仍关闭**(`-XX:+UseCompactObjectHeaders`,不再需要 `-XX:+UnlockExperimentalVMOptions`)。 - 分代 Shenandoah 在 25 只是**转正、默认模式仍为单代**。 - HTTP/3(JEP 517)**不属于 JDK 25**,从 JDK 26 起才进入 HttpClient。 - String Templates **已撤销**(23 起),任何写法都不得出现。 - `java.base` 的导出包数量以**实测**为准:JDK 25 为 **58** 个(JEP 512 写作时记的是 54,属时间差,不是矛盾)。 ## 本机环境(写作时务必注意) - JDK 25:Eclipse Temurin `25.0.4+7-LTS`,位于 `C:\Program Files\Eclipse Adoptium\jdk-25.0.4.7-hotspot`。 - **`PATH` 上的裸 `java` 是 JDK 8 旧安装**(`C:\ProgramData\Oracle\Java\javapath\java.exe` → `1.8.0_31`);`javac` 才是 JDK 25。运行示例请用 `"$env:JAVA_HOME\bin\java.exe"`。 - 验收命令:`javac --release 25 -Xlint:all -Werror -encoding UTF-8 -d out ` + 运行。