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

01 引言

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() 等方法

@Test
void testJDK9And10() {
    List<Integer> list = List.of(1, 2, 3, 4, 1);
    System.out.println(list);
    System.out.println("--------------------------------------");
    //  [1, 2, 3]

    // 从头开始获取,直到找到第一个不匹配的元素,返回之前的数据
    list.stream().takeWhile(itme -> itme < 3).forEach(System.out::println);
    // 1,2
    System.out.println("--------------------------------------");

    // 从头开始去除满足条件的数据,从不满足的条件的的数据开始遍历数据
    list.stream().dropWhile(itme -> itme < 3).forEach(System.out::println);
    // 3,4,1
}

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

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

var list = new ArrayList<String>();

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,提供同步/异步双模型。
@Test
void 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);
        //  test hellotest hello
    }
}

3.5 文本块(JDK13)

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

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

3.6 Switch 表达式(JDK15)

Switch 表达式

@Test
void 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");
    }
}

3.7 instanceof 模式匹配(JDK16)

不再需要手动强制转化了

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

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,给了这么些理由,够不够呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智_永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值