当前位置: 主页 > JAVA语言

java编写图形界面程序-2022年,Spring6和SpringBoot3的最低依赖就是JDK17

发布时间:2023-06-14 09:04   浏览次数:次   作者:佚名

2022年,Spring6和 SpringBoot3都推出了,在此之前,Java社区很坚挺,一直是"新版任你发,我用Java 8",不管新版本怎么出,很少有人愿意升级。 这一次,Spring 直接来了个大招,SpringBoot3和Spring6的最低依赖就是JDK17!跨过 JDK 8-16,直接升级到 JDK 17。那么为什么是 JDK 17呢?

背景

2022年,Spring6和 SpringBoot3都推出了,在此之前,Java社区很坚挺,一直是"新版任你发,我用Java 8",不管新版本怎么出,很少有人愿意升级。

这一次,Spring 直接来了个大招,SpringBoot3和Spring6的最低依赖就是JDK17!跨过 JDK 8-16,直接升级到 JDK 17。那么为什么是 JDK 17呢?

为什么是JDK17

这么多新版本的 JDK,而且2022年还会推出 JDK 18 和 JDK 19,为什么 Spring 选择了 JDK 17呢。

主要是因为他是一个 Oracle官宣可以免费商用的LTS版本,所谓 LTS,是 Long Term Support,也就是官方保证会长期支持的版本。

java编写图形界面程序_c语言编写界面程序_java编写界面

java编写界面_c语言编写界面程序_java编写图形界面程序

上面这张图是 Oracle 官方给出的 Oracle JDK 支持的时间线。可以看得到,JDK 17 最多可以支持到 2029 年 9 月份。按照技术更新迭代的速度,这次免费商用 8 年可谓是良苦用心,为的就是让使用者放心大胆地将 JDK 升级到 JDK 17(不过JDK 8 支持的时间更长,可以延长到 2030 年 12 月,JDK8可谓是YYDS!)

从 JDK 诞生到现在,还在长期支持的版本主要有 JDK 7、JDK 8 、JDK 11以及 JDK 1,JDK 17 将是继 Java 8 以来最重要的LTS版本,是 Java 社区八年努力的成果。

一直以来,Java8 都是 Java 社区心头的痛,Java8提供了很多特性,比如Lambda 表达式、Optional 类,加上Java8超长的支持时间,都导致了JDK8的使用至今。它代表着以稳定性为主的企业管理层与拥抱变化为主的程序猿之间的拉锯战。不升!成为各大厂心照不宣的选择。现在,这种平衡或将打破。因为 Java 届的霸主框架 SpringBoot,选择了最小支持的 Java lts 版本,就是最新的 Java17。

那么接下来,让我们看看,从JDK8到JDK17,Java 社区八年努力的成果有哪些?

从JDK8到JDK17的新特性JDK9新特性(2017年9月)

重要特性:主要是API的优化,如支持HTTP2的Client API、JVM采用G1为默认垃圾收集器

java编写图形界面程序_java编写界面_c语言编写界面程序

JDK10新特性(2018年3月)

重要特性:通过var关键字实现局部变量类型推断,使Java语言变成弱类型语言、JVM的G1垃圾回收由单线程改成多线程并行处理,降低G1的停顿时间

JDK11新特性(2018年9月)(LTS版本)

重要特性:对于JDK9和JDK10的完善,主要是对于Stream、集合等API的增强、新增ZGC垃圾收集器

JDK12新特性(2019年3月)

重要特性:switch表达式语法扩展、G1收集器优化、新增Shenandoah GC垃圾回收算法

JDK13新特性(2019年9月)

c语言编写界面程序_java编写界面_java编写图形界面程序

重要特性:ZGC优化,释放内存还给操作系统、socket底层实现引入NIO

JDK14新特性(2020年3月)JDK15新特性(2020年9月)

JDK16新特性(2021年3月)

JDK16相当于是将JDK14、JDK15的一些特性进行了正式引入,如instanceof模式匹配(Pattern matching)、record的引入等最终到JDK16变成了final版本

JDK17新特性(2021年9月)(LTS版本)

虽然JDK17也是一个LTS版本,但是并没有像JDK8和JDK11一样引入比较突出的特性java编写图形界面程序,主要是对前几个版本的整合和完善。

重要特性详解Java 模块化

java编写图形界面程序_java编写界面_c语言编写界面程序

JPMS(Java Platform Module System)是Java 9发行版的核心亮点。它也被称为Jigshaw项目。模块是新的结构,就像我们已经有包一样。使用新的模块化编程开发的应用程序可以看作是交互模块的集合,这些模块之间具有明确定义的边界和依赖关系。

JPMS包括为编写模块化应用程序提供支持,以及将JDK源代码模块化。JDK 9 附带了大约 92 个模块(在 GA 版本中可以进行更改)。Java 9 Module System有一个"java.base"模块。它被称为基本模块。它是一个独立的模块,不依赖于任何其他模块。默认情况下,所有其他模块都依赖于"java.base"。

在java模块化编程中:

典型的module-info.java类如下所示:

module helloworld {     
    exports com.alibaba.eight; 
} 
module test {     
    requires helloworld; 
}

总结:模块化的目的,是让jdk的各个组件可以被分拆,复用和替换重写,比如对java的gui不满意,可以自己实现一个gui,对java的语法不满意,可以把javac替换成其他语言和其他语言的编译器,比如kotlin和kotlinc等,没有模块化,几乎很难实现,每次修改某个模块java编写图形界面程序,总不能把整个jdk给重新编译一遍,再发布一个整个sdk吧,模块化可以帮助更有效的定制化和部署

本地变量类型推断

java编写图形界面程序_java编写界面_c语言编写界面程序

在Java 10之前版本中,我们想定义定义局部变量时。我们需要在赋值的左侧提供显式类型,并在赋值的右边提供实现类型:

MyObject value = new MyObject();

在Java 10中,提供了本地变量类型推断的功能,可以通过var声明变量:

var value = new MyObject();

本地变量类型推断将引入“var”关键字,而不需要显式的规范变量的类型。

其实,所谓的本地变量类型推断,也是Java 10提供给开发者的语法糖。

虽然我们在代码中使用var进行了定义,但是对于虚拟机来说他是不认识这个var的,在java文件编译成class文件的过程中,会进行解糖,使用变量真正的类型来替代var