从java8升级java17的一些调整总结

 更新时间:2026年03月03日 11:09:54   作者:学习OK呀  
在过去的几年里,Java经历了多次版本升级,从JDK8到JDK17,每一次升级都带来了许多新的特性和改进,这篇文章主要介绍了从java8升级java17的一些调整,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

jdk8 一直坚挺的使用过来,用了很多年了也已经非常习惯和了解了。为什么我现在要升级 jdk17 呢?由于连带的框架的升级,springboot2,到 springboot3,所需要的版本也在不断的限制,放弃了原有的 jdk8jdk17引入了许多实用的新特性,使代码更简洁、易读、易维护. 在性能上也有显著的改善。

语法糖变化

多行的字符串(Java 13/15)

之前我们标识字符内容里面总有烦人的\" 来转义引号。在新语法下,可以直接使用 """ 来前后包裹字符串.可以非常轻松的表达。看起来也不会那么的乱七八糟。对我来说还是很好用,尤其是对 json数据处理格外的明显。

"""
{"code":200,"msg":"成功","data":{"total":0,"data":[]}}
"""

switch 的表达式(Java 12 / 13)

可以直接使用箭头来表达,避免了break的问题,增加了返回值的表达式

String day = switch (dayOfWeek) {
    case MONDAY, TUESDAY -> "工作日";
    case SATURDAY, SUNDAY -> "周末";
    default -> throw new IllegalStateException("未知日期");
};

模式的匹配(Java 16)

传统的类型检查,我们经常需要两步,判断对象是否属于某个类型,然后在强制类型的转换

if (obj instanceof String) {
    String s = (String) obj;
    System.out.println(s.toUpperCase());
}

但是在 jdk16 之后,可以直接一步到位

if (obj instanceof String s) {
    System.out.println(s.toUpperCase()); // s 已经自动转换为 String 类型
}

记录类record

创建一个 record 类, 会自动帮我们创建equals() / hashCode() / toString()/ get方法

注意:所有字段都是 final 类型,且提供了全参构造函数 。 但不可以继承哦

record Point(int x, int y) {}

推荐使用场景为: 只需要一个不可变的数据类(DTO、POJO、VO 等)的时候

JDK 17 API上的升级

  1. 移除了部分旧 API
  • javax.xml.bind(JAXB)不再内置 → 需手动添加依赖(如用于 SOAP 或 XML 序列化)
  • java.corba, java.transaction 等模块被移除
  1. 强封装了内部的API
  • JDK 17 默认禁止反射访问 sun.*jdk.internal.* 等包
  • 某些旧库(尤其通过反射操作 Unsafe 的)会出错

框架和依赖上的变化

springboot 框架

我们常用的springboot框架,从之前版本 2 到了现在的版本 3.

比较重大的变化就是 Jakarta EE 9+ 命名空间变更包名从 javax.* 变为 jakarta.*

javax.persistence.*   -> jakarta.persistence.*
javax.validation.*    -> jakarta.validation.*
javax.servlet.*       -> jakarta.servlet.*
javax.annotation.*    -> jakarta.annotation.*
javax.transaction.*   -> jakarta.transaction.*

mybatisplus

从原先的mybatis-plus-boot-starter 依赖包替换成 mybatis-plus-spring-boot3-starter

mysql 驱动

可以使用新命名:mysql-connector-j,但连接配置保持不变,

spring.datasource.url=jdbc:mysql://localhost:3306/db?useSSL=false&serverTimezone=UTC

jwt

依赖模块的io.jsonwebtoken:jjwt , 拆分为多个模块(jjwt-api, jjwt-impl, jjwt-jackson 等)

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>1.0.0</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>1.0.0</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>1.0.0</version>
    <scope>runtime</scope>
</dependency>

代码语法构造上的一些调整:

Jws<Claims> jws = Jwts.parser()
    .verifyWith(secretKey)
    .build()
    .parseSignedClaims(token);

总结

使用了多年的java8,在面对不断更新的jdk和springboot,为了更好的适配新的AI,我们还是尽量选择拥抱新技术,当然历史项目的沉重包袱确实很难一下子卸下,需要慢慢过渡。新技术的使用最好还是应用在新项目上的尝试和体验。

相关文章

  • 举例解析Java的图像缓冲技术的使用

    举例解析Java的图像缓冲技术的使用

    这篇文章主要介绍了Java的图像缓冲技术的使用,使用到了Java的awt.image包,需要的朋友可以参考下
    2015-10-10
  • 浅谈list.removeAll()删除失败的原因及解决

    浅谈list.removeAll()删除失败的原因及解决

    这篇文章主要介绍了浅谈list.removeAll()删除失败的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Java填充替换数组元素实例详解

    Java填充替换数组元素实例详解

    这篇文章主要通过两个实例说明Java填充和替换数组中元素的方法,需要的朋友可以参考下。
    2017-08-08
  • Spring防止重复点击的两种实现方法

    Spring防止重复点击的两种实现方法

    页面重复提交导致的问题就是数据被重复保存,我们经常会误触点击两次,所以本文小编给大家介绍了Spring防止重复点击的两种实现方法,需要的朋友可以参考下
    2025-01-01
  • Mybatis结果集映射与生命周期详细介绍

    Mybatis结果集映射与生命周期详细介绍

    结果集映射指的是将数据表中的字段与实体类中的属性关联起来,这样 MyBatis 就可以根据查询到的数据来填充实体对象的属性,帮助我们完成赋值操作
    2022-10-10
  • 关于MongoDB图片URL存储异常问题以及解决

    关于MongoDB图片URL存储异常问题以及解决

    这篇文章主要介绍了关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Mybatis通过拦截器实现单数据源内多数据库切换

    Mybatis通过拦截器实现单数据源内多数据库切换

    这篇文章主要为大家详细介绍了Mybatis如何通过拦截器实现单数据源内多数据库切换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • 关于Maven循环依赖问题及解决过程

    关于Maven循环依赖问题及解决过程

    这篇文章主要介绍了关于Maven循环依赖问题及解决过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • 详解Java后端优雅验证参数合法性

    详解Java后端优雅验证参数合法性

    这篇文章主要介绍了详解Java后端优雅验证参数合法性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 配置了jdk的环境idea却提示找不到jdk解决办法

    配置了jdk的环境idea却提示找不到jdk解决办法

    在使用Java编程语言进行开发时,IDEA是一个非常流行和强大的集成开发环境,这篇文章主要给大家介绍了关于配置了jdk的环境idea却提示找不到jdk的解决办法,需要的朋友可以参考下
    2023-12-12

最新评论