当前位置: 首页 > news >正文

JDK17新增语法特征

1、引言

Spring Boot 3.0 开始不再支持 JDK 8,转而支持 JDK 17。
这篇博客我会列举较常用的新语法特性。

2、新增语法特征

2.1 yield关键字

从Java13开始引⼊yield关键字,yield关键字应用于switch语句中,我们可以使用yield来简化代码。

正常的switch语句代码:

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

使用 -> 来简化代码:

public static void main(String[] args) {String flg = "three";int value = switch (flg) {//使用 -> 来简化代码case "one" -> 1;case "two" -> 2;case "three" -> 3;default -> -1;};//注意这里要加;System.out.println(value);}

也可以使用yield来简化代码:

public static void main(String[] args) {String flg = "three";int value = switch (flg) {//使用yield关键字来简化代码case "one" : yield 1;case "two" : yield 2;case "three" : yield 3;default : yield -1;};//注意这里要加;System.out.println(value);}

2.2 var关键字

从Java10开始引⼊var关键字,var关键字的出现也是为了简化代码。

代码示例:

public static void main(String[] args) {var name = "dings";//Java会自动推导出name是String类型var age = 18;//Java会自动推导出age是int类型System.out.println(name+" "+age);}

编译器会通过所赋的值来自动推导出变量的类型。

需要注意一下几点:

1.var不能用来声明字段(成员变量)

2.var不能用来声明方法的参数

3.var不能用来声明方法的返回值类型

4.var声明的变量必须初始化,且不能初始化为null

2.3 sealed关键字(密封类)

在SE的学习中,我们已经知道,当类被final修饰时,这个类就变成了密封类,被final修饰的密封类不能再被任何类所继承。

在JDK17中,引入了sealed关键字,当类被sealed修饰时,也称作密封类,但是可以缩小密封的范围,在类的末尾通过permits来将这个密封类的继承权限开放给一些类,使得这个密封类可以被某些特定的类所继承。

sealed class A permits B,C,D {//将密封类的继承权限开放给B,C,D//sealed修饰的类必须要有子类//且这些子类必须被final修饰或被sealed修饰或者被non-sealed修饰
}
non-sealed class B extends A {//子类可以被non-sealed修饰,表示 不限制}
final class C extends A {//子类可以被final修饰}
sealed class D extends A {//子类也可以被sealed修饰,这个子类也成为了密封类,这个子类也必须再有子类}
non-sealed class E extends D {//继承被sealed修饰的D}

重点总结:

1.被sealed修饰的密封类通过permits来将继承权限开放给一些类(可以开放给多个类),如果没有写permits,那这个密封类就可以被任何类继承。

2.被sealed修饰的密封类必须要有子类。

3.这些子类必须被final修饰或被sealed修饰或者被non-sealed修饰。

4.被non-sealed修饰,表示不限制,可以被任何类继承,也可以不继承。

5.如果写了permits,那没有被permits允许的类,不能继承于这个密封类。

6.sealed和final的区别就是,sealed修饰的密封类必须要有子类。而final修饰的密封类必须没有子类。

2.4 接口中的私有方法

Java 8, 接口可以有默认方法。Java9之后,可以在接口内实现私有方法的实现,这个私有方法不
用被实现接口的类重写。(私有方法主要用于默认方法的使用)
代码示例:
interface A1 {void func1();default void func2() {//接口的默认方法System.out.println(1);func3();};//(课件这里加了; 我试了一下,加不加都可以)private void func3() {//接口的私有方法System.out.println(2);}
}
public class Demo implements A1{@Overridepublic void func1() {}public static void main(String[] args) {}
}

2.5 instanceof关键字

在SE学习向下转型的时候,我们就用到了instanceof关键字,是这样使用的:

class Animal {public void eat() {}
}
class Dog extends Animal {@Overridepublic void eat() {System.out.println("狗在吃饭");}public void swim() {System.out.println("狗在游泳");}
}
public class Test2 {public static void main(String[] args) {Animal animal = new Dog();if(animal instanceof Dog) {//判断animal引用的是否为Dog类Dog dog = (Dog)animal;dog.swim();}}
}

以前学习时,我们使用instanceof用来做三件事:

1.判断animal引用的是否为Dog类型的数据

2.如果是将animal为强转为Dog类型

3.创建一个Dog类的临时变量,将animal赋值给这个临时变量

在JDK16中,对instanceof进行了优化,使得代码更加的简洁:

public static void main(String[] args) {Animal animal = new Dog();if(animal instanceof Dog dog) {//判断animal引用的是否为Dog类,如果是创建临时变量dogdog.swim();}}

2.6 其他

还有很多现阶段不常用的,大家感兴趣的话,可以去探索!

OK~本次博客到这里就结束了,

感谢大家的阅读~欢迎大家在评论区交流问题~

如果博客出现错误可以提在评论区~

创作不易,请大家多多支持~

相关文章:

JDK17新增语法特征

1、引言 Spring Boot 3.0 开始不再支持 JDK 8,转而支持 JDK 17。 这篇博客我会列举较常用的新语法特性。 2、新增语法特征 2.1 yield关键字 从Java13开始引⼊yield关键字,yield关键字应用于switch语句中,我们可以使用yield来简化代码。 正常的…...

2748. 美丽下标对的数目(Rust暴力枚举)

题目 给你一个下标从 0 开始的整数数组 nums 。如果下标对 i、j 满足 0 ≤ i < j < nums.length &#xff0c;如果 nums[i] 的 第一个数字 和 nums[j] 的 最后一个数字 互质 &#xff0c;则认为 nums[i] 和 nums[j] 是一组 美丽下标对 。 返回 nums 中 美丽下标对 的总…...

Vue中双向数据绑定是如何实现的

在 Vue.js 中&#xff0c;双向数据绑定&#xff08;也称为响应式系统&#xff09;是通过其内部实现的一个系统来实现的&#xff0c;该系统可以追踪数据的变化&#xff0c;并在数据变化时自动更新 DOM。Vue 使用了一种称为“观察者-订阅者”的模式来实现这一点。 以下是 Vue 双…...

桌面云和云桌面的区别联系

桌面云和云桌面是两个相关但不完全相同的概念。桌面云是一种基于云计算技术的解决方案&#xff0c;将用户的桌面环境&#xff08;包括操作系统、应用程序和数据&#xff09;移至云端进行管理和交付&#xff0c;而云桌面是在服务器上虚拟化的桌面环境&#xff0c;用户通过网络连…...

ECMAScript6介绍及环境搭建

这实际上说明&#xff0c;对象的解构赋值是下面形式的简写。 let { foo: foo, bar: bar } { foo: ‘aaa’, bar: ‘bbb’ }; 也就是说&#xff0c;对象的解构赋值的内部机制&#xff0c;是先找到同名属性&#xff0c;然后再赋给对应的变量。真正被赋值的是后者&#xff0c;而…...

什么是Azure OpenAI?

Azure OpenAI 是微软与 OpenAI 合作推出的人工智能服务&#xff0c;旨在通过 Azure 云平台提供 OpenAI 的先进模型和技术。这个服务允许开发者和企业使用 OpenAI 的强大语言模型&#xff08;如 GPT-3、Codex 和 DALL-E 等&#xff09;来创建智能应用和解决方案。以下是一些主要…...

一个易于使用、与Android系统良好整合的多合一游戏模拟器

大家好&#xff0c;今天给大家分享的是一个易于使用、与Android系统良好整合的多合一游戏模拟器 Lemuroid。 Lemuroid 是一个专为Android平台设计的开源游戏模拟器项目&#xff0c;它基于强大的Libretro框架&#xff0c;旨在提供广泛的兼容性和卓越的用户体验。 项目介绍 Lem…...

java spring注解的使用

Java Spring框架中的注解用于简化代码的编写和配置工作。它们提供了一种简洁、强大和灵活的方式来定义和配置Spring应用程序。 下面是一些常用的Java Spring注解的使用示例&#xff1a; Component: 标记一个类为Spring容器管理的Bean&#xff0c;可用于任何类。 Component p…...

什么是数据同步?数据同步时发生中断怎么办?

数据同步是将数据从一个系统或平台复制到另一个系统或平台的过程。在现代信息化时代&#xff0c;数据同步变得越来越重要&#xff0c;因为组织需要在不同的系统之间共享数据&#xff0c;并确保数据的准确性和一致性。本文将介绍什么是数据同步以及数据同步中常出现的问题&#…...

HarmonyOS Next开发学习手册——ExtensionAbility

概述 EmbeddedUIExtensionAbility 是EMBEDDED_UI类型的ExtensionAbility组件&#xff0c;提供了跨进程界面嵌入的能力。 EmbeddedUIExtensionAbility需要和 EmbeddedComponent 一起配合使用&#xff0c;开发者可以在UIAbility的页面中通过EmbeddedComponent嵌入本应用的Embed…...

如何开发企业微信SCRM

企业微信SCRM&#xff08;Social Customer Relationship Management&#xff09;是一种用于管理和优化企业与客户关系的工具&#xff0c;它整合了社交媒体和CRM系统&#xff0c;帮助企业更有效地跟进销售线索、提供客户服务和进行市场营销。以下是开发企业微信SCRM的一些关键步…...

Java中的标准注解与数据校验:深入解析与实例

目录 Java中的标准注解与数据校验&#xff1a;深入解析与实例1. 基础校验注解NonNullNotBlankSize 2. 数值校验注解Min & MaxPositive & Negative 3. 枚举与模式匹配自定义注解示例&#xff08;概念性展示&#xff09; 4. 自定义校验逻辑结论 Java中的标准注解与数据校…...

模型泛化性测试

文章目录 准备工作场景描述训练数据集获取与训练 测试结论测试方案外机进行平移外机进行旋转外机即平移又旋转该螺纹孔位置 准备工作 场景描述 场景搭建如下如所示&#xff1a; 在该场景中&#xff0c;将机器人安置在桌子左上角处&#xff08;以面对显示器的视野&#xff09…...

智能推荐系统:技术解析与实践指南

智能推荐系统&#xff1a;技术解析与实践指南 背景与挖掘目标 在互联网信息爆炸的今天&#xff0c;用户在海量内容中筛选感兴趣的信息变得日益困难。因此&#xff0c;搜索引擎结合推荐系统的模式应运而生。本章节将深入探讨推荐系统&#xff0c;其核心目标如下&#xff1a; …...

盛元广通数字孪生智能集控实验室管理系统

盛元广通数字孪生智能集控实验室管理系统可广泛应用于各类实验室场景&#xff0c;包括科研实验室、教学实验室、工业实验室等。通过实时监测、预测性维护、故障诊断与优化等功能&#xff0c;该系统能够提高实验室的运行效率、安全性和可靠性&#xff0c;降低运维成本。设计直观…...

Spring Boot 优雅进行数据脱敏

文详细解析在Spring Boot应用中优雅地脱敏敏感信息&#xff0c;如手机号、邮箱、身份证等&#xff0c;使用的是Jackson库中的JsonSerializer。 1. 创建自定义脱敏序列化器 首先&#xff0c;创建一个继承自JsonSerializer<String>的序列化器。以MobileSerializer为例&am…...

Vue3 条件语句

Vue3 条件语句 在Vue.js 3.x版本中&#xff0c;条件语句是一种常用的功能&#xff0c;用于根据特定条件渲染不同的DOM元素。Vue提供了几种方式来实现条件渲染&#xff0c;包括v-if、v-else-if、v-else以及v-show。本文将详细介绍这些条件语句的用法&#xff0c;并通过示例来展…...

小白想要快速学好office办公软件,主要学习以下几个方面?

Office办公软件培训通常包括以下几个核心内容&#xff1a; 1.**Word文档处理**&#xff1a;学习如何创建、编辑、格式化文本&#xff0c;插入图片、表格和图表&#xff0c;调整页面布局和样式&#xff0c;以及进行文档打印和共享。 2.**Excel电子表格**&#xff1a;掌握如…...

【Linux文件系统】被打开的文件与文件系统的文件之间的关联刨析总结

操作系统管理物理内存以及与外设磁盘硬件进行数据的交换 操作系统如何管理物理内存呢&#xff1f; 其实操作系统内核先对内存先描述再组织的&#xff01;操作系统管理内存的基本单位是4KB&#xff0c;操作系统会为每一个4KB大小的物理内存块创建一个描述该4KB内存块的struct pa…...

爱迪特两年创业板上市路:销售费用率远高同行,侵权风险引关注

《港湾商业观察》施子夫 王璐 从2022年4月7日就冲刺创业板的爱迪特&#xff08;秦皇岛&#xff09;科技股份有限公司&#xff08;以下简称&#xff0c;爱迪特&#xff09;&#xff0c;预计将很快登陆资本市场。 爱迪特日前披露中签结果&#xff1a;本次发行股份数量为约1902…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...