首页 热门资讯文章正文

你还在用JDK8么?给你一个升级JDK17的理由,赶快升级!

热门资讯 2025年07月24日 03:17 2 admin

关注我的公众号:【编程朝花夕拾】,可获取首发内容。

01 引言

你还在用JDK8么?给你一个升级JDK17的理由,赶快升级!

JDK 自从被 Oracle 收购以后,那升级的速度和手机更新换代一样快,2025 年 3 月 18 日不是才发布了 JDK24么。这速度真的是让开发者来不及追赶,上一个版本还没有完全弄明白,下一个版本就已经发布了。

我们在开发中都会使用稳定版本(LTS),最经典的当属 JDK7。很多项目都是基于 JDK7开发的,随后的稳定版本分别有 JDK8(2014)、JDK11(2018)、JDK17(2021)、JDK21(2023)。

笔者入行就使用 JDK7,被告知 JDK7是最稳定的,当时 JDK8还不稳定,不建议使用。然后随着 JDK8中 lambda 表达式、Stream 流式编程 API、 #技术分享Optional 等被广泛使用,很多企业慢慢升级 JDK8。JDK8也就作为受欢迎的版本。因为 JDK8的广泛使用,IT 圈流行着这样一句话:它发由它发,我用 JDK 8。

02 JDK升级

对于学习 Java 的开发者来说,选择一个稳定的版本至关重要。JDK 的稳定版本有那么多,要不要升级呢?升级的话,要升级哪个版本呢?

JDK 的升级不能步子迈的太大,由于 JDK9、JDK11分别对部分模块进行了重构,所以盲目升级会导致导入的包丢失或者类找不到。所以 JDK 的升级需要对项目的引入进行评估。

JDK 的其他版本本次不做详细介绍,笔者建议至少升级到 JDK17。

03 JDK8到17新增的功能

3.1 集合工厂方法(JDK9)

List.of() , Set.of() , Map.of() 等快速创建不可变集合。

List<Integer> list = List.of(1, 2, 3, 4, 1);System.out.println(list);

3.2 改进 Stream API(JDK9)

新增 takeWhile() , dropWhile() 等方法

@Testvoid testJDK9And10() {    List<Integer> list = List.of(1, 2, 3, 4, 1);    System.out.println(list);    System.out.println("--------------------------------------");list.stream().takeWhile(itme -> itme < 3).forEach(System.out::println); System.out.println("--------------------------------------");list.stream().dropWhile(itme -> itme < 3).forEach(System.out::println); }

3.3 局部变量类型推断(JDK10)

var 变量最开始用在 js 中,后来用在 scala 中,现在 java 也支持了

var list = new ArrayList<String>();

C 3.4 HTTP Client API(JDK11)

支持同步/异步 HTTP 请求(取代 HttpURLConnection )。

  • 传统HttpURLConnection:自JDK 1.1引入,API设计陈旧,仅支持HTTP/1.1,同步阻塞模型,使用复杂 。
  • Apache HttpClient:功能丰富的第三方库,支持HTTP/1.1和HTTPS,提供连接池管理等高级特性 。
  • Java 11 HttpClient:Java 9引入孵化模块,Java 11正式发布,支持HTTP/2和WebSocket,提供同步/异步双模型。
@Testvoid testJDK11() throws IOException, InterruptedException {    HttpClient httpClient = HttpClient.newHttpClient();    HttpRequest request = HttpRequest.newBuilder()            .uri(URI.create("https://www.baidu.com"))            .build();HttpResponse<String> send = httpClient.send(request, BodyHandlers.ofString()); System.out.println(send.body());String str = "test hello"; String repeat = str.repeat(2).strip(); if (!repeat.isBlank()) { System.out.println(repeat); } }

3.5 文本块(JDK13)

支持多行字符串( """...""" ),简化 JSON/HTML 编写。这个也是 scala 中也是支持的.

@Testvoid testJDK13() {    String a = """            12121            1245            """;    System.out.println(a);}

C 3.6 Switch 表达式(JDK15)

Switch 表达式

@Testvoid testJDK15() {    var str = RandomUtil.randomInt(5);    System.out.println(str);    switch (str) {        case 1 -> System.out.println("1");        case 2 -> System.out.println("2");        case 3 -> System.out.println("3");        default -> System.out.println("default");    }}

C 3.7 instanceof 模式匹配(JDK16)

不再需要手动强制转化了

@Testvoid testJDK16() {    Object a = "hello";    if (a instanceof String astr) {        System.out.println(astr.length());    }}

04 框架的最低要求

SpringBoot

SpringBoot3.x 最新稳定版为 3.0.13 ,最低要求 JDK17

JDK 要求:

Spring AI 最低要求是 Spring Boot 3.x ,也就要求 JDK 最低也就是 JDK17

Nacos 3.x

Nacos 3.x 稳定版于2025-04-25发布,最低要求 JDK17

Nacos 3.x 集注册中心、配置中心于一体,有新增了 AI 相关的 MCP 的支持。

05 小结

JDK 从8到17,其中优化了很对语法,对开发者非常方便。笔者最喜欢文本块和集合工厂。除了语法,性能方面也提升不少。

越来越多的框架也纷纷最低支持 JDK17,要想使用新的框架,就需要使用 JDK17。升级 JDK8到17,给了这么些理由,够不够呢?

发表评论

泰日号Copyright Your WebSite.Some Rights Reserved. 网站地图 备案号:川ICP备66666666号 Z-BlogPHP强力驱动