【JavaSE】JDK17的一些特性

前言

springboot3.0开始,已经不⽀持JDK8

选⽤Java17,概括起来主要有下⾯⼏个主要原因

  • JDK17是LTS(⻓期⽀持版),可以免费商⽤到2029年。⽽且将前⾯⼏个过渡版(JDK9-JDK16) 去其糟粕,取其精华的版本
  • JDK17性能提升不少,⽐如重写了底层NIO,⾄少提升10%起步;
  • ⼤多数第三⽅框架和库都已经⽀持,不会有什么⼤坑;

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

前言

yield关键字

密封类

接口中的私有方法

instanceof


yield关键字

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

 简化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关键字代替->

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) ;
}

var关键字

从Java10开始,var被引⼊

用于自动推导代码的类型,例如下面代码,编译器会⾃动推断出name是⼀个String类型,age是⼀个int类型。

    public static void main(String[] args) {
        var name ="zhangsan";
        var age =10;
    }

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

例如下面代码中var根据后面的HashMap<String, List<Map<Integer, String>>>()自动推导类型 ,即这里的var代表Map<String, List<Map<Integer, String>>> 类型

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>>>();
 
}

注意:

  • 不能使⽤var来声明字段
  • 不能使⽤var来声明⽅法参数
  • 不能使⽤var来声明⽅法返回类型
  • var声明变量必须初始化,但是不能初始化为null

密封类

用fianl修饰的类不能被继承。

JDK17提供了⼀个新的关键字: sealed .密封类除了可以被该关键字修饰,并且在声明末尾⽤ permits 表⽰要开放给哪些类型。

//这里的sealed表示密封类,与fianl不同的是,它可以使用permits开放给一些类继承
sealed class Person permits YL{

}
//继承的类也要加上密封限制 non-sealed 表⽰不限制
non-sealed class YL extends Person{

}

注意:

sealed修饰的类必须要有⼦类

使⽤ non-sealed 关键字修饰。表⽰不限制,任何类都可以继承。

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

sealed class Animal permits Dog,Cat {
 public String name;
 public int age;
 public void eat() {
 System.out.println("eat()....");
 }
}
sealed class Cat extends Animal permits OrgCat{
 
}
non-sealed class OrgCat extends Cat {
 
}

接口中的私有方法

Java8,接⼝可以有默认⽅法。Java9之后,可以在接⼝内实现私有⽅法实现。

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

instanceof

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

上⾯的instancof语法⼀共做了三件事

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

hbase基础(二)

HBase第二天 名称空间 namespace&#xff1a;名称空间默认hbase有两个名称空间&#xff0c;default、hbasedefault名称空间是默认创建表的位置&#xff0c;hbase是专门存放系统表的名称空间&#xff08;namespace、meta&#xff09;管理命名空间指令 create_namespace 命名空…

qt tcp 连接 秒断连,求助

问题&#xff1a; tcp连接总是秒成功后断连 debug会出现下面这些 onecore\net\netprofiles\service\src\nsp\dll\namespaceserviceprovider.cpp(550)\nlansp_c.dll!00007FFDA2A1D93D: (caller: 00007FFDD8BEACF6) LogHr(1) tid(336c) 8007277C ¡£¡£ one…

小型企业网络优化加速方案

随着数字化经济蓬勃发展&#xff0c;小型企业的网络基础设施变得尤为重要。在这一浪潮中&#xff0c;建立一个稳定、高效的企业网络成为支撑业务发展的关键。本文将深入研究针对小型企业设计的网络优化加速方案&#xff0c;助力企业主了解如何规划和实施适合自身业务需求的网络…

Spring Boot 统一功能处理(三)

本篇主要介绍Spring Boot的统一异常处理。 目录 一、统一异常处理的使用 二、测试统一异常处理效果 三、浅析原理 ControllerAdvice简析 统一处理异常简析 一、统一异常处理的使用 在前面介绍统一数据返回时&#xff0c;我们在程序发生异常时会把整个报错信息都封装在da…

BRC20铭文铭刻解析

BRC20铭文铭刻的出现对于智能制造无疑是一个重要的里程碑。随着科技的飞速发展&#xff0c;智能制造已经成为制造业发展的必然趋势&#xff01;智能制造是指通过运用人工智能、物联网、大数据等先进技术&#xff0c;实现生产过程的自动化、智能化和高效化。 1. BRC20铭文的概念…

Docker了解及命令行使用

一、了解Docker 1、什么是Docker Docker为应用程序的开发、发布和运行提供了一个基于容器的标准化平台。容器运行的是应用程序&#xff0c;Docker平台用来管理容器的整个生命周期 2、虚拟机与容器 2.1、虚拟机是什么 虚拟机&#xff08;Virtual Machine&#xff09;是一种软…

PostgreSQL 免费的对象-关系数据库

目录 一、什么是数据库 二、ORDBMS 的一些术语 三、PostgreSQL 概述 四、PostgreSQL数据库优点和缺点 4.1PostgreSQL数据库的优点 4.2PostgreSQL数据库的缺点 4.3PostgreSQL 特征 五、Linux 上安装 PostgreSQL 5.1Yum 安装 PostgreSQL 5.1.1安装postgreSQL的官方yum仓…

华火电燃灶:重拾烹饪艺术的黄金法则,打造家庭美食的温馨记忆

记得在饭店给客户人炒菜的时候&#xff0c;炉灶下的每一道菜都透着诱人的香气。无论是炒肉还是炖汤&#xff0c;那股鲜香总让人回味无穷。然而&#xff0c;回到家&#xff0c;用上自家的燃气灶&#xff0c;发现同样的食材、同样的配方&#xff0c;味道却平淡无奇&#xff0c;仿…

记录一个hive中因没启yarn导致的spark引擎跑insert语句的报错

【背景说明】 刚在hive中配置了Spark引擎&#xff0c;在进行Hive on Spark测试时报错&#xff0c; 报错截图如下&#xff1a; [atguiguhadoop102 conf]$ hive which: no hbase in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_212/bin:/opt/mod…

一个简单的java递归下降语法分析器例子

import parser.Parser; import parser.RecursiveDescentParser;import java.util.ArrayList; import java.util.Arrays; import java.util.List;public class Main {public static void main(String[] args) {// 关键词List<String> keyList new ArrayList<>(Arra…

npm i 依赖下载失败

git config --global url."https://".insteadOf git://解决npm install 报错 npm ERR code 128 Permission denied_please make sure you have the correct access right-CSDN博客

Apache Answer 开源问答社区安装体验

Answer 是由 SegmentFault 思否团队打造的一款问答平台软件,后端使用 Go 语言编写,于2022年10月24日(程序员节)正式开源。你可以免费使用 Answer 高效地搭建一个问答社区,并用于产品技术问答、客户支持、用户交流等场景。 2023年10月9日,Answer 顺利通过投票,以全票通过…

【Python】函数基础(纯干货版)

目录 什么是函数 函数定义 函数的文档说明 局部变量和全局变量 综合案例&#xff1a;模拟实现ATM界面 什么是函数 函数是组织好的&#xff0c;可重复使用的&#xff0c;用于实现特定功能的代码段&#xff0c;将功能封装在函数内&#xff0c;可供随时随地重复利用&#xff…

BTP连接cloud connector中配置的SAP

登录地址 登录之后可以看到我们已经配置成功的后端系统SAP。 从cloud connector中获取location ID ,然后在BTP中配置Destination 选择目标标签页&#xff0c;点击‘新建目标’&#xff0c;如下图&#xff1a; 新建连接 暂时不知道错误原因 创建目标-HTTP  新建目标&…

(五)STM32F407 cubemx定时器PWM驱动舵机

这篇文章主要是个人的学习经验&#xff0c;想分享出来供大家提供思路&#xff0c;如果其中有不足之处请批评指正哈。 废话不多说直接开始主题&#xff0c;本人是基于STM32F407VET6芯片&#xff0c;但是意在你看懂这篇文章后&#xff0c;不管是F1,F4,H7等一系列系统定时器PWM配置…

动态IP与静态IP的区别,你选对了吗?

在互联网世界中&#xff0c;IP地址是每台设备在网络上的唯一标识。这些地址可以是动态的&#xff0c;也可以是静态的。对于非专业人士来说&#xff0c;理解这两者之间的区别可能会有些困难。本文旨在深入探讨动态IP和静态IP的主要差异&#xff0c;帮助读者根据自己的需求做出明…

华为sr-mpls policy配置案例

SR&#xff0d;MPLS POLICY在ensp上面做不了&#xff0c;这是官方上的配置

CSS基础之伪元素选择器(如果想知道CSS的伪元素选择器知识点,那么只看这一篇就足够了!)

前言&#xff1a;我们已经知道了在CSS中&#xff0c;选择器有基本选择器、复合选择器、伪类选择器、那么选择器学习完了吗&#xff1f;显然是没有的&#xff0c;这篇文章讲解最后一种选择器——伪元素选择器。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我…

爱上JDK源码阅读-Integer

知识点 自动装箱和拆箱IntegerCache机制toString()实现算法优化 从一道面试题开始 Integer a 100; int b 100; if (a b) {System.out.println("a b"); } else {System.out.println("a ! b"); }聪明的你应该马上可以知道答案了&#xff0c;输出就是 …

【SQL】DISTINCT GROUP BY

找到所有办公室里的所有角色&#xff08;包含没有雇员的&#xff09;,并做唯一输出(DISTINCT) 用DISTINCT : SELECT DISTINCT B.Building_name,E.Role FROM Buildings B LEFT JOIN Employees EON B.Building_name E.Building需要找到的结果&#xff1a;所有办公室名字&#…