首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >发展史:Java 走了 30 年,你还在跟 JDK 1.8 较劲?

发展史:Java 走了 30 年,你还在跟 JDK 1.8 较劲?

作者头像
程序视点
发布2026-05-29 13:55:13
发布2026-05-29 13:55:13
310
举报
文章被收录于专栏:程序小小事程序小小事

大家好!欢迎来到程序视点,我是你们的老朋友.安戈👋

前言

前两天有个读者私信我,语气挺委屈的:

「安戈,面试官问我 JDK 8 有什么新特性,我憋了半天,就说出个 Lambda……」

我回他:「Lambda 已经不错了,至少你没说 System.out.println。」

他沉默了三秒,又补了一句:「我们项目已经上 JDK 17 了,代码里 var、record 满天飞,我看得懂语法,但不知道这些玩意儿从哪冒出来的。」

说实话,看到这条消息,我挺有共鸣的。学 Java 的时候,谁没被版本号折磨过?JDK 1.8、Java 8、J2SE、J2EE……书上写的、同事说的、面试问的,经常对不上号。

今天这篇,不堆概念、不卖课,就是把我这些年踩过的坑、查过的资料,用大白话给你捋一遍——Java 这 30 年,到底经历了什么,你现在该关注哪些版本。

先搞懂:JDK、JRE、JVM,谁是谁?

别急着记版本号,先把「家族关系」搞清楚。

1775736125402.png
1775736125402.png

你可以这么理解:

Java 语言:老祖宗,定规矩、写语法。

JVM:翻译官,Windows、Mac、Linux 都能听懂 Java 的话。

JRE:翻译官单人套餐,能跑程序就行。

JDK:豪华全家桶,编译、调试、开发工具全都有。

写代码用 JDK,跑程序靠 JRE,跨平台靠 JVM。这三者的关系搞明白了,后面看版本演进才不会晕。

为什么要懂 Java 历史?不是闲的

有人觉得:「会写代码就行了,历史有什么用?」

还真有用。举几个真实场景:

面试问「JDK 8 核心新特性」,你只会背 Lambda,面试官追问 Stream、Optional,你就卡壳了。

项目用 JDK 17,同事说「这个 Switch 表达式 JDK 13 就有了」,你完全不知道人家在说什么。

技术选型时,有人提议上 JDK 21,有人坚持 JDK 8,你连个判断依据都没有。

懂历史,不是背年号,是看懂「为什么这样演进」——每个新特性,都是在解决上一代的痛点。

从一杯咖啡说起:Java 的诞生

1991 年,Sun 公司有个叫 Green 的项目,想给智能家电写通用控制系统。语言最初叫 Oak(橡树),后来商标撞车,团队想起常去的一家咖啡店叫 Java——于是,Java 这个名字和咖啡 Logo 就定下来了。

1996 年 1 月 23 日,JDK 1.0 发布,一句口号响彻全球:

「Write Once, Run Anywhere」 一次编写,到处运行。

同一份代码,不用改,就能在 Windows、Mac、Linux 上跑。那时候 Applet 让网页「动」起来,Java 火遍大江南北。基础语法、多线程、垃圾回收、AWT 图形界面,都在这个版本里扎了根。

野蛮生长:JDK 1.x 打地基 JDK 1.1(1997):企业级起步 JDBC 登场——Java 能标准化连数据库了。没有它,Java 想在企业后端当大哥,门都没有。还有内部类、反射、RMI,都是后来高频用到的能力。

1775737845710.png
1775737845710.png

JDK 1.2(1998):Java 2 平台三分天下

Sun 把 Java 拆成三块:

  • J2SE,标准版,桌面和基础开发
  • J2EE,企业版,服务器、Web、企业服务
  • J2ME,微型版,当年诺基亚、摩托罗拉上的应用

集合框架(List、Set、Map)、JIT 编译器、Swing,都在这个版本。HotSpot 虚拟机也在这时候引入,后来成了性能优化的里程碑。

JDK 1.3 / 1.4:稳步优化

JDK 1.3:HotSpot 成默认 JVM,性能明显提升。 JDK 1.4:NIO(非阻塞 I/O)、正则表达式、断言——高性能网络编程的基石。 JDK 5:Java 的「成人礼」

从 JDK 5 开始,命名规则变了:不再叫 JDK 1.5,直接叫 JDK 5

JDK 5这个版本的新特性,多到可以单独写一篇:

  • 泛型:List类型安全,不用到处强转。
  • 增强 for 循环:for (String s : list),遍历集合优雅多了。
  • 自动装箱/拆箱:Integer num = 10 不用手写 new Integer(10)。
  • 枚举:常量定义更规范。
  • 注解:@Override、@Deprecated,框架开发的利器。
  • 可变参数:print("a", "b", "c") 随便传。
  • 并发包:ThreadPoolExecutor、ConcurrentHashMap、CountDownLatch……

记不住?记个口诀:「泛强自枚注可静」——泛型、增强 for、自动装箱、枚举、注解、可变参数、静态导入

JDK 6-7:企业级时代,承前启后

JDK 6 主打性能优化和易用性:脚本语言支持、JDBC 4.0、G1 垃圾回收器(实验性)等。

JDK 7 原计划有大动作(Lambda),因 Sun 被 Oracle 收购而推迟,但几个实用特性留下了:

  • try-with-resources:资源自动关闭,不用再写 finally { br.close(); }。
  • 字符串 switch:switch ("MONDAY") 终于能用了。
  • 菱形操作符:Listlist = new ArrayList<>(),右边不用重复写类型。
  • 二进制字面量:0b1010、数字下划线分隔 1_000_000。

JDK 8:改变一切的版本

JDK 8 是迄今为止影响最深远的版本,没有之一。

哪怕你现在用 JDK 17、JDK 21,每天写的代码里,处处是 JDK 8 的影子。

1. Lambda 表达式

匿名内部类啰嗦?Lambda 一行搞定:

代码语言:javascript
复制
// 之前
Runnable r = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello");
    }
};
// JDK 8
Runnable r = () -> System.out.println("Hello");

2. Stream API

集合处理像写 SQL,声明式、链式调用:

代码语言:javascript
复制
List<String> filtered = list.stream()
    .filter(s -> s.length() > 3)
    .map(String::toUpperCase)
    .collect(Collectors.toList());

3. 接口默认方法

接口里可以写带方法体的默认实现了,向后兼容老代码。

4. 新日期时间 API

LocalDate、LocalDateTime 终于告别难用的 Date 和 Calendar。

5. Optional

优雅处理空指针,Optional.ofNullable(getName()).ifPresent(...) 比一堆 if (obj != null) 清爽。

###为什么企业爱 JDK 8?

语法革命 + 生态依赖 + 思维转变——Lambda 和 Stream 改变了写 Java 的方式,Spring Boot 2.x 等框架长期基于它,统治企业开发超过十年。

JDK 9-11:模块化与 LTS 新选择

JDK 9:模块化系统(Project Jigsaw),把庞大的 JDK 拆成模块,按需打包;还有 JShell、集合工厂方法 List.of() 等。

JDK 10:var 局部变量类型推断——var name = "Java",类型自动推断。

JDK 11:继 JDK 8 之后第一个被广泛采用的 LTS(长期支持) 版本。标准化 HttpClient、单文件直接运行 java Hello.java、实验性 ZGC 低延迟 GC,还移除了 Java EE 和 CORBA 等历史包袱。

JDK 12-17:语法糖不断,现代 Java 新标配

从 JDK 12 起,Java 引入预览特性机制:新特性先预览,根据反馈再定稿,需要 --enable-preview 才能用。

几个高频特性:

Switch 表达式(JDK 12-13)

int days = switch (month) { case JAN -> 31; ... }

Text Blocks 文本块(JDK 15)

多行字符串用 """ 包起来,写 JSON、HTML 不再拼接。

Records 记录类(JDK 16)

public record Person(String name, int age) {} 一行替代 getter、equals、hashCode、toString。

Sealed Classes 密封类(JDK 17)

限制类的继承关系,设计更清晰。 JDK 17 是第三个 LTS,Spring Boot 3.x 要求 JDK 17+,现代 Java 的新标配。

JDK 18-21:虚拟线程,并发新纪元

JDK 21(2023)是第四个 LTS,虚拟线程(Virtual Threads) 正式发布——可以在一个应用里轻松创建百万级并发线程,资源消耗极低:

代码语言:javascript
复制
// 传统线程
Thread thread = new Thread(() -> doWork());
thread.start();
// JDK 21 虚拟线程
Thread.startVirtualThread(() -> doWork());

高并发编程的门槛,被 JDK 21 砸平了一截。还有结构化并发、顺序集合接口等,都在往「更好写、更安全」的方向走。

避坑指南:版本号别搞混

JDK 1.8 = JDK 8 = Java 8,同一个东西,不同叫法。

J2SE 8 这种老说法,JDK 5 之后就翻篇了,现在叫 Java SE。

LTS 版本企业项目认准 LTS——JDK 8(免费官方更新已停)、JDK 11(支持至 2026)、JDK 17(支持至 2029)、JDK 21(支持至 2031,新项目强烈推荐)。

Java SE vs Java EE

  • SE 是地基(核心语法)
  • EE 现名 Jakarta EE,是 Web、企业服务等规范;

学 Java 先学好 SE。

面试官最爱问的两道题

:JDK 8 有哪些核心新特性?

A:Lambda 表达式、Stream API、接口默认方法、新日期时间 API(java.time)、Optional。能展开讲一两个使用场景,加分。

Q:为什么 JDK 8 影响这么大?

A:三点——语法革命(Lambda/Stream 改变写法)、生态依赖(框架长期基于它)、思维转变(从命令式走向声明式、函数式)。

一张表,30 年脉络

阶段

版本

核心意义

诞生

JDK 1.0

跨平台,Applet 时代

成长

JDK 1.2-1.4

集合框架、NIO、JIT

革命

JDK 5

泛型、注解、for-each

企业

JDK 6-7

企业级特性,性能优化

现代

JDK 8

Lambda、Stream、函数式

模块化

JDK 9-11

模块系统、HttpClient、var

成熟

JDK 12-17

Switch 表达式、Records、密封类

并发

JDK 18-21

虚拟线程、结构化并发

写在最后

Java 从 1996 年走到今天,每个版本都在解决开发者真实痛点:

  • 代码啰嗦就加泛型、for-each;
  • 并发难写就加线程池、并发集合;
  • 函数式优雅就加 Lambda、Stream;
  • 高并发有瓶颈就加虚拟线程。

学 Java 版本史,不是为了背年号,是为了看懂「为什么这样设计」——以后面试、做技术选型、读老项目代码,心里都有底。

如果你也在版本号里迷路过,或者面试被 JDK 8 问懵过,评论区聊聊你的经历。觉得这篇对你有用,点个赞、收个藏,让更多在学 Java 的朋友少踩点坑。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序视点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 先搞懂:JDK、JRE、JVM,谁是谁?
  • 为什么要懂 Java 历史?不是闲的
  • 从一杯咖啡说起:Java 的诞生
  • JDK 1.2(1998):Java 2 平台三分天下
  • JDK 1.3 / 1.4:稳步优化
  • JDK 6-7:企业级时代,承前启后
  • JDK 8:改变一切的版本
    • 1. Lambda 表达式
    • 2. Stream API
    • 3. 接口默认方法
    • 4. 新日期时间 API
    • 5. Optional
  • JDK 9-11:模块化与 LTS 新选择
  • JDK 12-17:语法糖不断,现代 Java 新标配
    • Switch 表达式(JDK 12-13)
    • Text Blocks 文本块(JDK 15)
    • Records 记录类(JDK 16)
    • Sealed Classes 密封类(JDK 17)
  • JDK 18-21:虚拟线程,并发新纪元
  • 避坑指南:版本号别搞混
    • Java SE vs Java EE
    • 面试官最爱问的两道题
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档