JDK17语法新增特性(常用)

1、yield 关键字

yield 关键字从Java13开始引入,用于从case的代码块中返回值

示例:

正常的switch语句:

    public static void main(String[] args) {String data = "one";int result = 0;//接收数据的返回值switch(data) {case "one":result = 1;//为result重新赋值break;case "two":result = 2;//为result重新赋值break;default:result = -1;break;}System.out.println(result);}

简化后的switch:

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

使用yield关键字的switch:

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

2、var关键字

var 关键字从Java10开始引入,可以自动识别类型

var name = "zhangsan";
var age = 10;

上述代码中,编译器会自动判断出name时一个String类型,age是一个int类型

使用var可以使代码更简洁,有时候,类型名称可能会非常长,例如泛型中

var就像一个简化器,让我们不必反复写出繁琐的类型名,如下:

    public static void main(String[] args) {Map<String, List<Map<Integer, String>>> complexMap = new HashMap<String, List<Map<Integer, String>>>();var complexMap2 = new HashMap<String, List<Map<Integer, String>>>();}

注意事项:

  1. 不能使用var来声明字段
  2. 不能使用var来声明方法参数
  3. 不能使用var来声明方法返回类型
  4. var声明变量必须初始化,但是不能初始化为null

3、密封类

密封类一般应用在类和接口中,对接口和类的实现和继承进行约束

主要使用的关键字是final,当该类被final修饰,被修饰的类就变成密封类,无法被其他类所继承

JDK17提供了一个新的关键字:sealed,密封类可以被该关键字修饰,并且可以在声明末尾用使用permits表示要开放给哪些类型继承

下面代码Animal为密封类,然后使用permits关键字,把继承权限1开放给Dog类

sealed class Animal permits Dog{}
non-sealed class Dog extends Animal{}

tips:

1、sealed修饰的类必须要有子类

2、使用 non-sealed 关键字修饰,表示不限制,任何类都可以继承

3、若示例中Animal声明中没写permits,则所有类均可继承Animal;若写了,则未被permits允许的类,无法继承Animal

permits可声明多个类,上述错误代码可改为如下:

4、复杂的特殊写法

4、接口中的私有方法

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

interface HelloService {public void sayHello();//默认方法default void saySomething() {sayEngHello();sayHello();};//私有方法private void sayEngHello() {System.out.println("Hello!");}
}

5、instanceof

常见代码:

    if (obj instanceof String) {String str = (String) obj;   ...}

上面instanceof语法一共做了三件事:

  1. 判断是否为String类型
  2. 如果是,转成String类型
  3. 创建一个名为str的临时变量

在JDK16中,使用模式匹配思想改进了instanceof用法。可以做到以下优化效果:

if(obj instanceof String str) { //判断obj是否为String类型,如果是创建临时变量str}

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

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

相关文章

2024年计算机、信息工程与大数据应用国际会议(CIEBDA 2024)

2024 International Conference on Computer, Information Engineering, and Big Data Applications 【1】大会信息 会议简称&#xff1a;CIEBDA 2024 大会地点&#xff1a;中国青岛 审稿通知&#xff1a;投稿后2-3日内通知 投稿邮箱&#xff1a;ciebdasub-paper.com 【2】会…

三、【源码】Mapper XML的解析和注册使用

源码地址&#xff1a;https://github.com/mybatis/mybatis-3/ 仓库地址&#xff1a;https://gitcode.net/qq_42665745/mybatis/-/tree/03-parse-mapperXML Mapper XML的解析和注册使用 流程&#xff1a; 1.Resources加载MyBatis配置文件生成Reader字符流 2.SqlSessionFact…

[职场] 质量管理求职简历工作经历范文6篇 #知识分享#经验分享

质量管理求职简历工作经历范文6篇 质量管理是指确定质量方针、目标和职责&#xff0c;并通过质量体系中的质量策划、控制、保证和改进来使其实现的全部活动&#xff0c;EMBA、MBA等主流商管教育均对质量管理及其实施方法有所介绍。下面是质量管理求职简历工作经历范文6篇&…

一种用于异质结高电子迁移率晶体管(HEMTs)的紧凑型漏电流模型,其中包括双子带的二维电子气(2DEG)密度解

来源&#xff1a;A compact drain current model for heterostructure HEMTs including 2DEG density solution with two subbands&#xff08;Solid-State Electronics 16年&#xff09; 摘要 本文提出了一种针对异质结高电子迁移率晶体管(HEMTs)的二维电子气(2DEG)电荷密度…

【ARM Cache 系列文章 7.2 – ARMv8/v9 MMU 页表配置详细介绍 03 】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 表描述符 Table descriptor52-bit OA 颗粒为4KB 和16KB52-bit OA 颗粒为64KB48-bit OA 颗粒为4KB 和16KBStage 1 和 Stage 2 介绍第一阶段(Stage 1)转换的表描述符属性字段第二阶段(…

【Python】教你彻底了解Python中的并发编程

​​​​ 文章目录 一、并发编程的基本概念1. 线程&#xff08;Thread&#xff09;2. 进程&#xff08;Process&#xff09;3. 协程&#xff08;Coroutine&#xff09; 二、Python中的线程与进程1. 线程1.1 创建和启动线程1.2 线程同步 2. 多进程2.1 创建和启动进程2.2 进程间…

【Python数据预处理系列】掌握数据清洗技巧:如何高效使用drop()函数去除不需要的列

目录 一、准备数据 二、使用drop函数去除掉指定列 在数据分析和预处理的过程中&#xff0c;经常会遇到需要从数据集中移除某些列的情况。本文将引导您了解如何使用drop函数高效地去除不需要的列&#xff0c;帮助您提升数据处理技能&#xff0c;确保您的数据集只包含对分析有价…

MYSQL ORDER BY

在MySQL中&#xff0c;默认情况下&#xff0c;升序排序会将NULL值放在前面&#xff0c;因为在排序过程中&#xff0c;NULL会被视为最小值。然而&#xff0c;有时会要求在升序排序中需要将NULL值放在最后。 例如根据日期升序时就会出现这种问题 方案一&#xff1a; SELECT sor…

【PostgreSQL 小课】日志及审计 01:日志

日志及审计 01&#xff1a;日志 以下内容是来自于我的知识星球&#xff1a;《PostgreSQL 小课》专栏&#xff0c;有需要可以关注一下 PostgreSQL 提供了非常丰富的日志基础设施。能够检查日志是每个 DBA 的关键技能——日志提供了关于集群过去的操作、当前正在进行的操作以及发…

数据虚拟化:零数据搬运,实现全域数据的集成和自适应加速

数据虚拟化技术的兴起&#xff0c;与传统数据仓库体系的弊端日益显现有着密切关系。 过去&#xff0c;企业通常会构建数据仓库来存储与加工结构化数据。数据仓库虽然实现了数据的物理集中存储&#xff0c;但过于依赖大量的 ETL 工程师来支持数据的集成、准备、开发与管理。随着…

uniapp小程序src引用服务器图片时全局变量与图片路径拼接

理论上&#xff0c;应该在main.js中定义一个全局变量&#xff0c;然后在页面的<image>标签上的是src直接使用即可 main.js 页面上 看上去挺靠谱的&#xff0c;实际上小程序后台会报一个错 很明显这种方式小程序是不认的&#xff0c;这就头疼了&#xff0c;还想过另外一个…

宝藏级-LLM-文档级别向量化问答技术总结

简单且详细的目录 1.简单阶段描述2.阶段展开描述2.1.第一阶段技术:加载文档-读取文档-文本分割(Text splitter)2.1.1.加载读取文档:读取加载的文档内容,通常是将其转化为文本格式2.1.1.1.基于文档解析工具的方法2.1.1.1.1.pdf解析工具2.1.1.1.2.doc、docx解析工具2.1.1.1.3.…

Android 蓝牙概述

一、什么是蓝牙 蓝牙是一种短距离&#xff08;一般10m内&#xff09;无线通信技术。蓝牙技术允许固定和移动设备在不需要电缆的情况下进行通信和数据传输。 “蓝牙”这名称来自10世纪的丹麦国王哈拉尔德(Harald Gormsson)的外号。出身海盗家庭的哈拉尔德统一了北欧四分五裂的国…

【js】input设置focus()不生效

实现功能&#xff1a;点击添加文章标签的时候&#xff0c;输入框聚焦。 页面上&#xff0c;input输入框默认不显示&#xff0c;是display:none; 点击添加按钮后&#xff0c;input输入框才显示。 在js里面直接获取元素进行设置聚焦不成功 。 ∵ focus方法比show方法先执行。j…

docker目录挂载失败:Check if the specified host path exists and is the expected type

docker目录挂载失败&#xff1a;Check if the specified host path exists and is the expected type docker目录挂载命令&#xff0c;其目的是为了达到修改linux上的文件同步到容器上&#xff0c;从而实现修改容器的配置文件。 在docker目录挂载或启动容器时报错&#xff0c…

spring源码初始学习基础-环境

环境&#xff1a;在这里插入代码片 allprojects {repositories {maven { url file:///D:/software/repository} // 本地仓库地址&#xff0c;如果没有依次向下寻找maven { url "https://maven.aliyun.com/repository/public" }mavenLocal()mavenCentral()}buildscri…

2年JAVA今日头条3轮面试经历

面头条的时候已经是十月底了。大半个月没有面试&#xff0c;之前准备的知识点比如http状态码之类的记忆性的东西&#xff0c;早就忘光了。 二面的时候问了一堆状态码&#xff0c;全都不记得了。面试官态度很好&#xff0c;跟我说&#xff0c;你现在不记得了&#xff0c;说明你…

【Vue】组件通信

文章目录 一、组件之间如何通信二、组件关系分类三、通信解决方案四、父子通信流程五、父向子通信代码示例六、子向父通信代码示例 组件通信&#xff0c;就是指组件与组件之间的数据传递 组件的数据是独立的&#xff0c;无法直接访问其他组件的数据。想使用其他组件的数据&…

利用人工智能-智慧合同管理系统规避企业合同管理风险

随着企业业务的不断扩展&#xff0c;合同管理在企业运营中扮演着越来越重要的角色。然而&#xff0c;传统的合同管理方法往往存在效率低下、风险控制不足等问题。为了解决这些问题&#xff0c;道本科技智慧合同管理系统不仅通过合同全生命周期的管理对企业合同管理从宏观上做了…

开发uniapp 小程序时遇到的问题

1、【微信开发者工具报错】routeDone with a webviewId XXX that is not the current page 解决方案: 在app.json 中添加 “lazyCodeLoading”: “requiredComponents” uniapp的话加到manifest.json下的mp-weixin 外部链接文章&#xff1a;解决方案文章1 解决方案文章2 &qu…