JDK JDK 学习手册8 → 27 · JDK 专用学习站
JDK 8 · LTS · 2014-03-18 · 完整课程

JDK 8:Lambdas 改变 Java:函数式与流式的同时到来

JDK 8 是 Java 历史上影响最大的一次语言升级:Lambda 让行为可以像数据一样传递,Stream 把集合处理变成可组合的流水线,java.time 修正了旧日期 API 的设计缺陷。同时,default 方法让标准库可以在不破坏实现类的前提下演进。

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

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

合上资料后,逐条自述

  1. Lambda 解决了什么表达问题?为什么它必须绑定函数式接口,而不能独立存在?
  2. Lambda 在字节码层为什么不是匿名内部类?invokedynamic 与 LambdaMetafactory 各自负责什么?
  3. Stream 的中间操作与终止操作如何分工?惰性求值和短路分别在什么条件下发生?
  4. parallel stream 什么时候值得用?commonPool、有序性和共享可变状态的边界在哪里?
  5. Optional 想表达什么?为什么它不适合字段、方法参数和集合元素?
  6. java.time 为什么能取代 Date/Calendar?LocalDateTime、Instant、ZonedDateTime 各自表示什么?
  7. default 方法解决了什么兼容性问题?菱形冲突时编译器按什么规则选择?
  8. PermGen 移除后 Metaspace 如何分配?为什么 -XX:MaxPermSize 在 8 上只是警告?
验收方式:不是「看过」,而是能用自己的话讲出因果、举出代码例子、说出至少一个版本边界或反例。每个深钻单元最后的费曼自检就是按这个标准设计的。

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

学习路径TRACKS

面试突击 · 2 小时

先结论后机制

先刷 15 道高频题暴露盲区,再回到速查补齐 API 与版本边界。重点看追问和陷阱,不要只背结论。

API 迁移 · 1 天

从旧写法迁移

按「Lambda → Stream → Optional → java.time → default 方法」顺序迁移。每步都先确认运行时确实是 JDK 8,避免误用 9+ 的 API。

机制深钻 · 2 天

字节码 + 数据结构

从 invokedynamic 看到 LambdaMetafactory,从 Spliterator 看到 Sink 链,再从 hash 扰动看到树化。理解代价,才知道什么时候不该用。

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

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

全部学习单元9

速查模块 · 6 个主题

深钻模块 · 3 个主题

版本上下文JDK 8

JDK 8 于 2014-03-18 发布,是继 5 之后又一次语言级升级。JEP 126 引入 Lambda 与接口默认方法,JEP 107 引入 Stream,JEP 150 引入 java.time,JEP 122 移除永久代。今天绝大多数 Java 项目的写法,仍然建立在这四个变化之上。

Lambda 表达式Stream / 批量集合操作Date and Time API重复注解Nashorn JavaScript 引擎移除永久代
版本边界提醒:本课程只使用 JDK 8 正式能力:Lambda、方法引用、Stream、Optional、java.time、default/static 接口方法、CompletableFuture、HashMap 树化、Metaspace。var、List.of、Files.readString、String.isBlank、HttpClient、record、sealed、文本块都不属于 JDK 8;边界表会逐项标注。

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

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

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