JDK JDK 学习手册8 → 27 · JDK 专用学习站
JDK 11 · LTS · 2018-09-25 · 完整课程

JDK 11:模块化之后,第一个 LTS

JDK 11 是 Java 6 个月发布节奏下的第一个 LTS。它把 JDK 9 的模块系统、JDK 10 的 var、以及 JDK 11 自己的 HttpClient、单文件源码启动、String / Files 便利方法和 ZGC 打包成一个可长期使用的基线。它的难点不是新语法,而是版本归属:很多被称作「JDK 11 新特性」的东西,其实来自 9 或 10。

速查 6 主题深钻 3 主题面试 15 题速查卡 12 张class 版本 55
已掌握 0 / 0 个学习单元
在任意速查 / 深钻页底部标记

这一课,你必须能自己回答GOALS

合上资料后,逐条自述

  1. var 是 JDK 10 还是 11?它推断出的类型在什么时候确定,哪些位置不能用?
  2. JDK 9、10、11 各自带来了什么?为什么 JDK 11 的课程必须先把这三个版本拆开?
  3. HttpClient 的连接池、HTTP/2 多路复用与 sendAsync 如何配合?为什么 JDK 11 不能对它使用 try-with-resources?
  4. String.isBlank / lines / strip / repeat 与 Files.readString / writeString 的边界分别是什么?默认编码是哪一版改变的?
  5. List.of / Map.of 来自哪一版?它们和 Arrays.asList、Collections.unmodifiableList、List.copyOf 的行为差在哪里?
  6. 单文件源码启动解决了什么问题?它不生成 class 文件、只支持一个源文件,这些限制意味着什么?
  7. ZGC 的着色指针、读屏障、并发整理如何把停顿压到 10ms 以内?为什么 JDK 11 的 ZGC 只能算实验能力?
  8. JPMS 的模块路径与类路径、未命名模块、强封装分别是什么?JDK 11 的 --illegal-access 默认值,和 JDK 17 有什么本质区别?
验收方式:不是「看过」,而是能用自己的话讲出因果、举出代码例子、说出至少一个版本边界或反例。每个深钻单元最后的费曼自检就是按这个标准设计的。

三种模式,各解决一个问题MODES

学习路径TRACKS

面试突击 · 2 小时

先结论后边界

先刷 JDK 11 高频题,暴露「把 9/10 的能力记成 11」这类盲区,再回到速查页核对 API 与版本表。

从 8 升到 11 · 1 天

移除项 + 工具链

按「版本坐标 → Java EE 移除 → 反射访问 → --release → 模块化」的顺序推进。先把启动和编译稳住,再谈模块路径。

平台能力深钻 · 2 天

机制 + 实测

把 HttpClient 的连接池与异步、ZGC 的并发整理、String / Files 的编码边界放在一起看。重点不是 API 名字,而是代价和平台限制。

换一个版本,继续同一门课SWITCH

所有完整课程共用「速查 → 深钻 → 面试」结构。切换版本后,再从顶栏版本菜单切一次,就会落在目标版本的同一模块。

全部学习单元9

速查模块 · 6 个主题

01

var:局部变量类型推断

var 是 JDK 10 的特性,不是 11。它把局部变量的类型交给编译器推断,类型在编译期就固定,字节码里没有「动态类型」。JDK 11 只做了一件事:允许 lambda 参数写 var,从而给参数加注解。

18 分钟基础
02

HttpClient:标准化的 HTTP/1.1 与 HTTP/2 客户端

java.net.http.HttpClient 在 JDK 11 转正,替代老旧的 HttpURLConnection:同步/异步、HTTP/2、WebSocket、连接池和 BodyHandler 都在一套 API 里。它是线程安全、可复用的长生命周期对象;JDK 11 还没有 close()。

28 分钟核心
03

String 与 Files:JDK 11 的文本便利方法

JDK 11 给 String 增加了 isBlank、lines、strip、repeat,给 Files 增加了 readString / writeString。它们都很小,但编码边界比方法本身重要:Files 的默认编码是 UTF-8,而 JDK 11 的 Charset.defaultCharset() 仍然取决于平台。

22 分钟基础
04

集合:不可变工厂与 JDK 11 的小补丁

List.of / Set.of / Map.of 是 JDK 9 的工厂方法,List.copyOf 是 JDK 10 的不可变拷贝;JDK 11 只补了 Optional.isEmpty、Predicate.not 和 Collection.toArray(IntFunction) 等小方法。把版本拆清楚,比背 API 更重要。

24 分钟核心
05

单文件源码启动:java Hello.java

JDK 11 允许直接用 java 命令运行一个 .java 源文件:编译器在内存中编译,不生成 .class。它降低了脚本、教学和小工具的门槛,但不是多文件项目或生产构建的替代品。

16 分钟基础
06

从 8 迁移到 11

JDK 11 是 8 之后的第一个 LTS。升级的主要风险不是新语法,而是移除的 Java EE / CORBA 模块、Nashorn 与 Pack200 的弃用、G1 成为默认 GC,以及反射访问与 --release 的边界。它比 17 宽松:JDK 11 默认仍允许非法反射访问,只是警告。

30 分钟进阶

深钻模块 · 3 个主题

版本上下文JDK 11

JDK 11 于 2018-09-25 发布,是 8 之后的第一个 LTS。它同时是 JPMS(9)、var(10)与 HttpClient(11)三条线的汇合点:模块系统改变了类路径与反射的规则,var 改变了局部变量的写法,HttpClient 替换了老旧的 HttpURLConnection。也正因为跨了三个版本,学习时必须逐项确认「这个能力到底从哪一版开始」。

HTTP Client 标准化单文件源码启动Lambda 参数使用 varZGC 实验性登场Flight Recorder移除 Java EE 与 CORBA
版本边界提醒:JDK 11 是 LTS,但不是「所有新特性的集合」。var 来自 JDK 10;List.of / Map.of、JPMS、JShell 来自 JDK 9;HttpClient、String.isBlank / lines / strip / repeat、Files.readString / writeString、单文件源码启动、ZGC、Epsilon 才是 JDK 11。record、sealed、switch 模式匹配、虚拟线程、文本块都不在 JDK 11:文本块 15 才正式,Nashorn 在 11 只是弃用、15 才移除。ZGC 在 11 是实验性特性,且只支持 Linux/x64。

查看 JDK 11 完整版本档案(全部 JEP、移除项)→ · 查看跨版本演进矩阵 →

JDK 学习手册 · JDK / Java 专用学习站 · 纯静态 · 双击 index.html 即可使用

本站专注 JDK 版本演进与 Java 教学,非 Oracle / OpenJDK 官方站点。版本数据来自 OpenJDK 官方 Features 表;课程示例已在对应本机 JDK 实测。构建日期 2026-11-12。