JDK17新增的特性

2024-06-07 05:04
文章标签 jdk17 特性 新增

本文主要是介绍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 }

这篇关于JDK17新增的特性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038240

相关文章

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

一二三应用开发平台应用开发示例(4)——视图类型介绍以及新增、修改、查看视图配置

调整上级属性类型 前面为了快速展示平台的低代码配置功能,将实体文件夹的数据模型上级属性的数据类型暂时配置为文本类型,现在我们调整下,将其数据类型调整为实体,如下图所示: 数据类型需要选择实体,并在实体选择框中选择自身“文件夹” 这时候,再点击生成代码,平台会报错,提示“实体【文件夹】未设置主参照视图”。这是因为文件夹选择的功能页面,同样是基于配置产生的,因为视图我们还没有配置,所以会报错。

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter 今年5月份GreenPlum官方将GitHub仓库代码全部删除,各个分支的issues和bugs讨论等信息全部清除,仅将master分支代码进行归档。对于国内应用GPDB的用户来说,这是一个挑战性事件,对与后期维护、升级等都变得非常困难。有幸HashData开源了基于GP衍生版本CloudberryDB版本,

Hbase特性介绍

1、什么是Hbase。 是一个高可靠性、高性能、列存储、可伸缩、实时读写的分布式数据库系统。 适合于存储非结构化数据,基于列的而不是基于行的模式 如图:Hadoop生态中HBase与其他部分的关系。 2、关系数据库已经流行很多年,并且Hadoop已经有了HDFS和MapReduce,为什么需要HBase? Hadoop可以很好地解决大规模数据的离线批量处理问题,但是,受限于Hadoo

Html5 与CSS3中的新特性

Html5 绘画 canvas 元素   用于媒介回放的 video 和 audio 元素   本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;   sessionStorage 的数据在浏览器关闭后自动删除   语意化更好的内容元素,比如 article、footer、header、nav、section   表单

深入解析Java的三大特性(下)

深入解析Java的三大特性(下) 在上一篇文章中,我们详细介绍了Java的三大特性之一——封装的概念、实现方式及其优点。本文将继续探讨Java的另两大特性:继承和多态。 2. 继承(Inheritance) 2.1 什么是继承 继承是面向对象编程中的一个重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承,子类可以复用父类的代码,减少重复代码的编写,并且可以扩展和重写父

【Flink metric】Flink指标系统的系统性知识:以便我们实现特性化数据的指标监控与分析

文章目录 一. Registering metrics:向flink注册新自己的metrics1. 注册metrics2. Metric types:指标类型2.1. Counter2.2. Gauge2.3. Histogram(ing)4. Meter 二. Scope:指标作用域1. User Scope2. System Scope ing3. User Variables 三.

【C++11 之新增容器 array、foward_list、tuple、unordered_(multi)map/set】应知应会

C++11 标准中新增了多个容器,这些容器为 C++ 程序员提供了更多的选择,以满足不同的编程需求。以下是对这些新容器的介绍和使用案例: std::array 介绍: std::array 是一个固定大小的数组容器,它在栈上分配内存,并提供了类似于标准库容器的接口。它提供了更好的类型安全性和范围检查,同时保持了与原生数组相似的性能。std::array 的大小必须在编译时确定,并且不能更改。

WHAT - NextJS 系列之六大特性

目录 一、介绍二、特性RoutingRenderingData FetchingStylingOptimizationsTypeScript 官方文档:https://nextjs.org/docs 一、介绍 Next.js is a React framework for building full-stack web applications. You use React

VUE2 elementui 动态表单嵌套新增移除

VUE2 elementui 动态表单嵌套新增移除 代码 <template><div><el-button type="text" @click="dialogTableVisible = true">打开嵌套表格的 Dialog</el-button><el-dialog title="收货地址" :visible.sync="dialogTableVisible"><el-form r