常用的JDK9-JDK17的一些新增语法特性

目录

  • 1.前言
  • 2.一些新增的特性
    • 2.1 yield关键字
    • 2.2 var关键字
    • 2.3 空指针异常
    • 2.4 密封类
    • 2.5 接口中的私有方法
    • 2.6 instanceof
    • 2.7 其他

1.前言

从springboot3.0开始,已经不⽀持JDK8了。参考资料 :Spring官方博客。从3.0开始,转变为JDK17。
在这里插入图片描述
官方维护的版本都是SpringBoot3.X的了, 但是之前的版本也是可以用的, 只是官放不再进行功能更新了。
在这里插入图片描述
综上所述,选⽤用Java 17,概括起来主要有下面几个主要原因:
1.JDK 17 是 LTS (长期支持版),可以免费商用到 2029 年。而且将前面几个过渡版(JDK 9-JDK 16)去其糟粕,取其精华的版本;
2.JDK 17 性能提升不少,比如重写了底层 NIO,至少提升 10% 起步;
3.大多数第三方框架和库都已经支持,不会有什么大坑;

2.一些新增的特性

2.1 yield关键字

yield关键字,从Java13开始引⼊。yield关键字用于从case的代码块中返回值。
普通的switch语句:

public static void main(String[] args) {String str="one";int result;switch (str){case "one":result=1;break;case "two":result=2;break;case "three":result=3;break;default:result=0;break;}System.out.println(result);}

简化后的switch:

public static void main(String[] args) {String str="one";int result=switch (str){case "one"->1;case "two"->2;case "three"->3;default->0;};System.out.println(result);}

如果不想使用指向符-> 可以使用yield来代替:

public static void main(String[] args) {String str="one";int result=switch (str){case "one": yield 1;case "two": yield 2;case "three": yield 3;default: yield 0;};System.out.println(result);}

2.2 var关键字

从Java10开始,var被引入

var a="zhangsan";
var b=10;

上述代码中,编译器会⾃动推断出name是⼀个String类型,age是⼀个int类型。
为什么使用var?
使用var可以使代码更简洁。有时候,类型名称可能会非常长,例如泛型。var就像是⼀个简化器,让你不必反复写出繁琐的类型名。举例如下
在这里插入图片描述
使用注意事项:
1.不能使用var来声明字段
在这里插入图片描述
2.不能使用var来声明方法参数
在这里插入图片描述
3.不能使用var来声明方法返回类型
4.var声明变量必须初始化,但是不能初始化为null
在这里插入图片描述

2.3 空指针异常

出现异常的具体方法和原因都一目了然。如果你的一行代码中有多个方法、多个变量,可以快速定位问题所在,如果是 JDK1.8,有些情况下真的不太容易看出来。
在这里插入图片描述
在这里插入图片描述

2.4 密封类

密封类⼀般应用在类和接口中,对接口和类的实现和继承进行约束。主要使⽤的关键字是 final。当这个类被 final 修饰了,被修饰的类就变成完全封闭的状态了,所有类都没办法继承。
JDK17提供了⼀个新的关键字: sealed.密封类除了可以被该关键字修饰,并且在声明末尾用permits 表示要开放给哪些类型。
下述代码Person为密封类,然后使用permits 关键字,把继承权限开放 给了GGB 类

sealed class Person permits GGb{}
final class GGb extends Person{}

继承后的类同样要加密封性质,使用final、sealed或者no-sealed。
注意事项
1.sealed修饰的类必须要有子类
在这里插入图片描述
2.使用 non-sealed 关键字修饰。表示不限制,任何类都可以继承。

sealed class Person permits GGB{}
non-sealed class GGB extends Person{}
class GB extends GGB{}

3.未被permits允许的类型没办法继承
在这里插入图片描述

2.5 接口中的私有方法

Java 8, 接口可以有默认方法。Java9之后,可以在接口内实现私有方法实现。

interface Test1{private void eat(){}
}

2.6 instanceof

public static void main(String[] args) {String obj=null;if(obj instanceof String){System.out.println("hehe");}}

上⾯的instanc of语法⼀共做了三件事:
1.判断是否为String类型;
2.如果是,转成String类型;
3.创建⼀个名为str 的临时变量;
JDK16中,使用模式匹配思想改进了instanceof 用法,可以做到以下优化效果:

public static void main(String[] args) {String obj="hello";if(obj instanceof String str){// obj是否为String类型,如果是创建临时变量strSystem.out.println("hehe");}}

2.7 其他

其他还有很多未列举到的,比如:
1.ZGC-新⼀代垃圾回收器、G1垃圾回收器相关等等
2.record 类的使用
3.Stream API的部分改进
4.HttpClient 重写了,⽀持 HTTP2.0
5.支持 List.of()、Set.of()、Map.of()和Map.ofEntries()等工厂方法实例化对象
6.等等更多的知识,期待着同学们去探索!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/3313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node+Vue3+mysql+ant design实现前后端分离——表格的添加、修改和删除

在上一篇文章中,我们分享了如何运用NodeJS、Vue、MySQL以及其他技术来实现后台管理系统中的表格查询功能。今天,我们将继续探讨另外三个重要的功能实现原则。这些原则在构建后台管理系统时至关重要,同时还有导入和导出这两种功能也必不可少。关于导入和导出功能,我们会在下…

2024.4月最新的高额度Hostinger优惠券、优惠代码、优惠链接

优惠链接:https://hostinger.com?REFERRALCODE1RAY132 以上优惠链接最低可获取30%折扣,以Cloud Startup版本为例,四年期直接购买价格为480 ,使用以上优惠链接购买价为 380 ,使用以上优惠链接购买价为380 &#xff0c…

CUDA的开发框架

CUDA的开发框架主要提供了一系列工具和库,使得开发者可以充分利用NVIDIA GPU进行高效的并行计算。以下是CUDA开发框架的一些关键组成部分。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.CUDA核心库:这些是构…

C++设计模式:中介者模式(十五)

1、定义与动机 定义:用一个中介对象来封装(封装变化)一系列的对象交互。中介者使各个对象不需要显示的相互引用(编译时依赖 -> 运行时依赖),从而使其耦合松散(管理变化)&#xff…

vue3+node.js+mysql+ant design实现表格的查询功能

今日主要分享如何运用vue、nodejs、mysql及ant design构建表格数据查询功能,这也是众多项目开发者关注的问题。最关键在于前端与后端的协作,后端数据则通过nodejs编写。尽管涉及多项技术,看似复杂,但实际操作却并非困难。当然&…

企业如何建立网络事件应急响应团队?

企业如何建立网络事件应急响应团队? 一、应急响应中每一秒都很重要二、选择外包服务还是建立自己的网络安全应急响应团队?三、您的应急响应团队需要谁?1. 应急响应小组2. 技术支持和监控团队 四、应急响应小组1. 安全分析工程师 – 具有网络、…

Selenium 使用指南

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 Selenium是网页应用中最流行的自动化测试工具,可以用…

LM324的输出VOL与IOL你注意过吗?

电路图 途中LMC6084 更改为LM324 故障现象 这个电路的输入输出表达式为 R30 两端电压等于0V 当J16 的4脚与2脚相等,等于5V(或者4脚略大于2脚时)7脚输出 约 500mV; 实际应该为0V左右才对.见下图 故障原因 上图运放输出低电平…

【ENSP】VRRP配置方法

VRRP配置步骤 1.配置虚拟ip地址作为网关,进行切换路由器 2.配置vrrp优先级,越大越优先 3.配置延迟抢占时间 4.配置备份组监视接口 AR1路由器配置 u t m #关闭提示 sys …

java POI解析Excel大文件,获取表头

目录 前言依赖代码StreamingReader的openWorkbookFactory的createCSV解析首行 前言 poi解析大文件可能出现oom,通样大小文件,xlsx会oom,xls不会,所以使用流式的方式改造解析xlsx文件的代码。 我的需求是提取每一页的表头&#xf…

创建Maven项目的时候让选择maven模板

创建Maven项目的时候让选择maven模板 心得 工欲利其事 必先利其器。如果你想要干成一件事 那么必须先要精通对应的工具使用。之前我不太注重工具 我觉得只要代码写的好就可以了 但是当我们了解了产品经理的一些思想之后,我才明白一个好的产品是可以给用户提供多大…

wasm 系列之 WebAssembly 和 emscripten 暴力上手

wasm 是什么? wasm 是 WebAssembly 的缩写。wasm 不是传统意义上的汇编语言,而是一种编译的中间字节码,可以在浏览器和其他 wasm runtime 上运行非 JavaScript 类型的语言,只要能被编译成 wasm,譬如 kotlin/wasm、Rus…

IOS恢复

1、实验目的 通过本实验可以掌握: copy方式恢复IOS的步骤。TFTPDNLD方式恢复IOS的步骤。Xmodem方式恢复IOS的步骤。 2、实验拓扑 路由器IOS恢复的实验拓扑如下图所示。 3、实验步骤 如果工作中不慎误删除路由器IOS,或者升级了错误版本的IOS&#xff…

Https协议原理剖析【计算机网络】【三种加密方法 | CA证书 】

目录 一,fidler工具 前提知识 二,Https原理解析 1. 中间人攻击 2. 常见的加密方式 1). 对称加密 2). 非对称加密 对称加密 4). CA证书 1. 数据摘要 3. 数字签名 CA证书 理解数据签名 存在的安全疑问&am…

js基础知识(2)

一、事件的含义 JavaScript事件是指在文档或者浏览器中发生的一些特定交互瞬间,比如打开某一个网页,浏览器加载完成后会触发load事件,当鼠标悬浮于某一个元素上时会触发hover事件,当鼠标点击某一个元素时会触发click事件等等。 三…

力扣练习4.25

92. 反转链表 II 要求在指定的区间内反转。 解题思路: 将整个链表拆成三部分,第一部分是头节点到left的前一个节点,第二部分是left到right的待反转区间,第三部分是right的下一个节点为头结点到尾部。 首先根据反转链表的方法遍历…

在PostgreSQL中如何处理跨表的级联删除和更新?

文章目录 解决方案1. 使用外键约束和级联操作创建外键约束并指定级联删除创建外键约束并指定级联更新 2. 使用触发器(Triggers)创建触发器实现级联删除 示例代码示例1:使用外键约束和级联删除示例2:使用触发器实现级联删除 在Post…

Golang | Leetcode Golang题解之第44题通配符匹配

题目: 题解: func isMatch(s string, p string) bool {for len(s) > 0 && len(p) > 0 && p[len(p)-1] ! * {if charMatch(s[len(s)-1], p[len(p)-1]) {s s[:len(s)-1]p p[:len(p)-1]} else {return false}}if len(p) 0 {retur…

Python基础:【习题系列】面向对象

在Python中,用于定义类的关键字是什么?( B ) A.classs B.class C.Class D.type 答案:B 难易程度:易 答案解析:在Python中,定义类需要使用关键字class。 知识点:类定义;Python关键字 在Python中,以下哪个关键字用于在类中引用同一类的其他方法或属性?( C ) A.…

C#使用ftp进行文件上传和下载功能(二)

上一篇主要讲解FTP服务器的搭建&#xff0c;本节话不多说直接撸码&#xff1a; 1.首先ftp需要有ip和port&#xff0c;以及登录用户等信息&#xff0c;因此创建三个属性&#xff1b; /// <summary> /// FTP的服务器地址&#xff0c;格式为ftp://192.168.1.234:80…