JDK17新增的特性

1.yield关键字:

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

正常从case的代码中获取返回值:

    public static void main(String[] args) {
int x=1;
int result=0;
switch (x){case 1,2,3,4,5:result=10;break;case 10,20,30:result=20;break;default:result=30;
}System.out.println(result);}

注意:一个case语句后可多填几个常量


简化的switch-case语句接收返回值:

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

简化后的switch-case语句接收返回值,改用了箭头指向返回值


不用箭头,用yield来接收返回值

    public static void main(String[] args) {int x=1;int result=switch (x){case 1:yield 10;case 2:yield 2;default:yield 3;};System.out.println(result);}

与不简化的switch-case接收返回值相比,少了break语句,有了返回值

2.var关键字:

        var a=10;var str="hello";var flag=true;var d=12.2;var f=12.2f;

使用var可以使代码更简洁。有时候,类型名称可能会非常长,例如泛型。var就像是一个简化器,让你不必反复写出繁琐的类型名。

使用注意事项:

1. 不能使用var来声明字段

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

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

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

3.密封类

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

情形:被sealed修饰的是密封类,必须子类,写permits 表示要开放给哪些类型,不写则开放给所有类

sealed class Person {private String name;private int age;
}
final class Student extends Person{
}non-sealed class Teacher extends Person{}

子类可以被final修饰:表示当前类不能被继承

子类被non-sealed修饰:表示当前类没有限制

子类被sealed修饰,和父类的情形一样

未被 permits 允许的类型,则没办法继承

4.接口中的私有方法

JDK9以后,接口里面可以实现私有方法

interface HelloService {public void sayHello();// 默认⽅法 default void saySomething(){syaEngHello();sayHello();};// 私有⽅法 private void syaEngHello(){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/23514.shtml

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

相关文章

【Mybatis】INSERT INTO 遇到NULL怎么处理?

目录标题 背景-使用Mybatis手写批量插入Insert方法测试核心代码,author字段为null,插入条件怎么写? MybatisPlus解决方案自动填充字段 Mybatis解决方案if标签处理 问题:如果不在工程里面设置默认值?如何直接使用数据库…

Facebook广告账号Facebook新手如何避免账号被封?

Facebook作为全球最大的社交媒体平台之一,吸引着众多企业和个人用户进行社交和推广。然而,由于种种原因,Facebook账号有可能会被封禁。尤其是新号,在Facebook账号被封后不知道怎么办。今天小编整理了一些新手避免Facebook账号被封…

26-unittest之装饰器(@classmethod)

unittest中的setUp可以在每个测试方法运行前执行,有效的减少了代码量。但有个弊端,比如打开浏览器操作,执行每个测试方法前都要重新打开一次,这样就会浪费很多时间。 是否可以只打开一次浏览器,执行完所有的测试方法后…

Python做Web:深度剖析与多维评价

Python做Web:深度剖析与多维评价 Python作为一种强大的编程语言,在Web开发领域也有着广泛的应用。然而,关于Python做Web的效果如何,却是一个充满争议和困惑的话题。本文将从四个方面、五个方面、六个方面和七个方面进行深入剖析和…

Springboot jar运行时,将jar内的文件拷贝到文件系统中

背景 因为执行需要,需要把jar内templates文件夹下的的文件夹及文件加压到宿主机器的某个路径下, 以便执行对应的脚本文件 PS: 通过类加载器等方式,直接getFile遍历文件,在idea中运行是没问题的,但是当打包成jar运行就会…

从零手写实现 nginx-07-大文件传输 分块传输(chunked transfer)/ 分页传输(paging)

前言 大家好,我是老马。很高兴遇到你。 我们希望实现最简单的 http 服务信息,可以处理静态文件。 如果你想知道 servlet 如何处理的,可以参考我的另一个项目: 手写从零实现简易版 tomcat minicat 手写 nginx 系列 如果你对 n…

金融科技重塑跨境支付:创新引领全球支付新纪元

一、引言 随着全球化的加速和科技的飞速发展,跨境支付作为国际贸易的“血脉”,正经历着前所未有的变革。金融科技以其强大的创新能力和技术支撑,正在重塑跨境支付领域的格局,推动全球支付行业向更加高效、安全、便捷的方向发展。本文将深入探讨金融科技如何引领跨境支付的创…

Python高效计算库Joblib的详细入门教程

文章目录 1. Joblib库是什么?2. 核心功能介绍及演示2.1 高效序列化和反序列化对象2.2 快速磁盘缓存2.3 并行计算 1. Joblib库是什么? Joblib 是一个用于在 Python 中进行高效计算的开源库,提供了一些用于内存映射和并行计算的工具&#xff0…

图分类之Hierarchical Graph Differentiable Pooling (下)

作者代码链接 https://github.com/RexYing/diffpool 1. paper中介绍的图池化机制 SoftPoolingGcnEncoder 是为图结构数据设计的神经网络模型。它通过结合分层池机制扩展了传统图卷积网络(GCN)的功能。这种池化机制通过逐步减少节点数量,同…

【Mongodb】Mongodb亿级数据性能测试和压测

一,mongodb数据性能测试 如需转载,请标明出处:https://zhenghuisheng.blog.csdn.net/article/details/139505973 mongodb数据性能测试 一,mongodb数据性能测试1,mongodb数据库创建和索引设置2,线程池批量…

React+TS前台项目实战(一)-- 项目初始化配置及开此系列的初衷

文章目录 前言一、初始化项目二、基础配置1. 项目目录及说明如下2. TS版本使用Craco需注意 总结 前言 前面 后台管理系统实战 系列教程暂时告一段落了,想了解全局各种配置的可自行查看。本次教程将重点介绍React前台项目的实操,关于具体的配置&#xff…

龙迅LT8712X TYPE-C或者DP转HDMI加VGA输出,内置MCU,只是IIS以及4K60HZ分辨率

龙迅LT8712X描述: LT8712X是一种高性能的Type-C/DP1.2到HDMI2.0和VGA转换器,设计用于将USB Type-C源或DP1.2源连接到HDMI2.0和VGA接收器。LT8712X集成了一个DP1.2兼容的接收器,一个HDMI2.0兼容的发射机和一个高速三角机窝视频DAC。此外&…

Python 可变长参数的魔法:灵活函数设计的秘密

哈喽,大家好,我是木头左! 什么是可变长参数? 在 Python 中,可变长参数允许你向函数传入任意数量的参数,而无需预先定义它们的个数。这为编写更加灵活和通用的函数提供了可能。可变长参数主要有两种形式&am…

记录某书请求返回406及响应{“code“:-1,“success“:false}

今天测试某个平台的爬虫时使用requests post请求正常写了个测试脚本把各种参数带上出来以后出现了406情况,和网站数据是完全一样的 以为是 X-S、X-T参接不对,但在postman里测试又是可以的成功,以为是检验了参数顺序,测试发现也没…

JavaSE基础语法合集

随着不断学习,我们已经走完了JavaSE基础语法的所有内容,博主的单独语法篇共十二篇,感兴趣的也可以去看看,内容基本一致,目录是重新排布的,数组和方法都在初识Java章节。 适合:老手复习和新手从零…

Linux下的Git应用及配置

1、卸载 2、安装 3、创建并初始化 4、配置 (附加删除语句) 5、查看(tree .git/) 6、增加和提交 7、打印日志 8、验证已操作工作

sc.tl.rank_genes_groups()问题

今天被问到了一个关于sc.tl.rank_genes_groups()的奇怪的问题 import scanpy as sc import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt # from CellDART import da_cellfraction # from CellDART.utils import random_mix from…

谷歌个人开发者账号“14+20”封测没通过?你可能忽视了这个细节

众所周知,在Google play平台如果使用个人开发者账号上架应用,在提审正式版应用前,需要满足20人连续封闭测试14天的要求,不少开发者在这个阶段遇到了问题,被谷歌认为没满足要求,从而不能上架应用。 为什么你…

国产开发板——香橙派Kunpeng Pro的上手初体验

开发板(Development Board)是一种特殊的电子产品,它的主要目的是为了帮助开发者快速地设计、测试和验证电子产品的硬件和软件设计。开发板通常提供了一个完整的硬件平台,包括微控制器、存储器、接口和其他外围设备,开发…

性能狂飙:SpringBoot应用优化实战手册

在数字时代,速度就是生命,性能就是王道!《极速启航:SpringBoot性能优化的秘籍》带你深入SpringBoot的内核,探索如何打造一个飞速响应、高效稳定的应用。从基础的代码优化到高级的数据库连接池配置,再到前端…