JDK17新特性

为什么要升级JDK17

image.png

JDK17带来了哪些变化

swtich语句增强

// jdk8switch
int statusCode = 0;
String statusName = "";
switch (statusCode) {case 1:statusName = "开始";break;case 2:statusName = "进行中";break;case 3:statusName = "结束";break;default:statusName = "未知";break;
}
  1. 省略break,简化赋值
// jdk17switch
String statusName2 = switch (statusCode) {case 1 -> "开始";case 2 -> "进行中";case 3 -> "结束";default -> "未知";
};

2.多值匹配

// 17switch 多值匹配
String statusName3 = switch (statusCode) {case 1, 2 -> "开始";case 3 -> "结束";default -> "未知";
};

3.表达式(业务逻辑+返回值)

// 17switch 表达式
String statusName4 = switch (statusCode) {case 1, 2 -> {System.out.println("开始");yield "开始";}case 3 -> {System.out.println("结束");yield "结束";}default -> {System.out.println("未知");yield "未知";}
};

4.类型推断(预览功能)

// 17switch 对象类型匹配
Object obj = "hello";
String statusName5 = switch (obj) {case String s -> s;case Integer i -> i.toString();default -> "未知";
};

字符串拼接增强

// java8 多行字符串拼接
String str = "<p>" +"Spring Boot应用可执行jar,启动器以及格式等等。" +"</p>";

1.多行字符串拼接优化

// java17 多行字符串拼接
String str2 = """<p>Spring Boot应用可执行jar,启动器以及格式等等。</p>""";

2.\s单个空白字符

// java17 多行字符串拼接 /s 表示空格
String str3 = """<p>Spring Boot应用可执行jar,启动器以及格式等等。\s</p>""";

3.尾行加\两行连接为一行

String str4 = """<p>Spring Boot应用可执行jar,启动器以及格式等等。\</p>""";

instanceof增强

// java8 instanceof
Object obj = "hello";
if (obj instanceof String) {String str = (String) obj;System.out.println(str);
}

14预览版出现16正式使用

// java17 instanceof
if (obj instanceof String str) {System.out.println(str);
}

密封类

什么是密封类?
密封类是指在声明类的时候,可以使用sealed关键字来修饰,修饰后的类只能在本包中被继承,不能被其他类继承。
优点:

  • 安全,可限制子类继承
  • 可控,限制继承范围在包内

1.父类限定指定类继承

public sealed class Shape permits Circle, Rectangle, Square {···
}

2.final修饰子类(无法再继承)

public final class Circle extends Shape {···
}

3.non-sealed修饰子类()

public non-sealed class Rectangle extends Shape {···
}

Record类

类似于lombook,提供获取属性方法和有参构造,并重新equals和toString,没有读取属性的方法和无参构造。
使用场景:坐标

 record Person(String name, int age) {public Person {if (age < 0) {throw new IllegalArgumentException("Age cannot be negative");}}
}
Person person = new Person("Bob", 20);
System.out.println(person.name());

空指针异常优化

解决空指针只有行提示问题,可定位到具体对象

Integer i = null;
int res = i / 0;

异常提示
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because "i" is null

ZGC垃圾收集器

减少了STW内存冻结时间到亚秒基本,支持堆内存到TB

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

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

相关文章

【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(LDxLDxR)?

将内存中的数据搬到 NEON 寄存器,有很多指令可以完成,熟悉这些指令是必须的。 1 LD1 (multiple structures) 将多个单元素结构加载到一个,两个,三个或四个寄存器上。该指令从内存中加载多个单元结构,并将结果写入一、二、三或四个 SIMD&FP 寄存器。 无偏移 一个寄存…

基于nodejs+vue办公OA公文发文件管理系统

论文的研究内容包括&#xff1a;公文分类、公文信息、待办提醒等方面进行了研究。系统以当前应用最为广泛的nodejs语言为基础&#xff0c;结合了目前应用最为广泛的嵌入式嵌入式平台&#xff0c;集成了B/S体系结构。数据库选择简便高效的MySQL&#xff0c;vue框架。在OA公文发文…

简单理解旁路电容和去耦电容

1、本文内容如有错误&#xff0c;欢迎交流指正。 2、本文仅作为本人学习笔记&#xff0c;部分内容来源于网络、书籍&#xff0c;如涉及侵权&#xff0c;请联系删除。 什么是旁路电容&#xff1f; 旁路电容的英文原文是Bypass capacitor&#xff0c;bypass就是绕过&#xff0c;避…

Spring修炼之路(2)依赖注入(DI)

一、概念 依赖注入&#xff08;Dependency Injection,DI&#xff09;。 测试pojo类 : Address.java 依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 . 注入 : 指Bean对象所依赖的资源 , 由容器来设置和装配 . 二、 注入方式 2.1构造器注入 我们在之前的案例已经…

系统集成|第十二章(笔记)

目录 第十二章 沟通管理12.1 沟通的基本概念12.2 主要过程12.2.1 规划沟通管理12.2.2 管理沟通12.2.3 控制沟通 12.3 常见问题 上篇&#xff1a;第十一章、项目人力资源管理 下篇&#xff1a;第十三章、干系人管理 第十二章 沟通管理 沟通管理在项目计划、执行、监控过程中具有…

echarts添加点击事件

实现效果&#xff1a;点击图表&#xff0c;弹出该数据下对应得详情 官方文档&#xff1a; 封装的图表组件中&#xff1a; 点击获取点击得对象&#xff0c;进而将需要的参数传给父组件&#xff0c;在父组件中再去请求接口获取更多信息 this.chart.on(click, (params)> {th…

C# 数组

C# 数组 数组简单数组多维数组锯齿数组Array类数组的接口枚举 数组 如果需要使用同一类型的多个对象&#xff0c;就可以使用集合和数组。C#用特殊的记号声明和使用数组。 简单数组 在声明数组时&#xff0c;应先定义数组中元素的类型&#xff0c;其后是一个空方括号和一个变…

Docker 自动化部署(保姆级教程)

Docker 自动化部署 1. jenkins 介绍1.1 参考链接&#xff1a;1.2 jenkins 概述1.3 jenkins部署项目的流程 2. jenkins 安装2.1 基于docker 镜像2.2 启动 jenkins 后端服务2.3 登录 jenkins 服务后端 3. jenkins自动化部署开始3.1 下载需要的插件3.2 创建任务3.2.1 描述3.2.2 配…

【图论C++】树的重心——教父POJ 3107(链式前向星的使用)

》》》算法竞赛 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在竞赛算法学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff1a;转载…

Neo4j-双向关系

概述 这是GraphAware中关于双向关系的解释。 网址链接Modelling Data in Neo4j: Bidirectional Relationships | GraphAware 定向关系 Neo4j中的关系必须有一个语义化的类型和方向。 没有方向关系是模棱两可的&#xff0c;上面A队打败B队&#xff0c;如果没有方向&#xff0c…

AOP 编程

目录 ​编辑一、AOP 编程 1、AOP 概念 2、AOP 编程的开发步骤 3、切面的名词解释 二、AOP 的底层实现原理 1、核心问题 2、动态代理类的创建 &#xff08;1&#xff09;JDK 的动态代理创建 &#xff08;2&#xff09;CGlib 的动态代理 &#xff08;3&#xff09;总结…

支持笔记本电脑直插直充,TOWE 65W智能快充PDU超级插座

电源插排在我们的生活中是必不可少的电器配件。今天&#xff0c;我们日常生活中所使用的电子设备越来越多&#xff0c;无论是手机、平板、笔记本电脑还是各种家用电器&#xff0c;都需要电源来驱动。虽然相对于其他电器来说&#xff0c;插排结构比较简单&#xff0c;但现代家庭…

设计模式5、原型模式 Prototype

解释说明&#xff1a;使用原型实例指定待创建对象的类型&#xff0c;并且通过复制这个原型阿里创建型的对象 UML 结构图&#xff1a; 抽象原型&#xff08;Prototype&#xff09;&#xff1a;规定了具体原型对象必须实现的clone()方法 具体原型&#xff08;ConcretePrototype&…

【我的创作纪念日】使用pix2pixgan实现barts2020数据集的处理(完整版本)

使用pix2pixgan &#xff08;pytorch)实现T1 -> T2的基本代码 使用 https://github.com/eriklindernoren/PyTorch-GAN/ 这里面的pix2pixgan代码进行实现。 进去之后我们需要重新处理数据集&#xff0c;并且源代码里面先训练的生成器&#xff0c;后训练鉴别器。 一般情况下…

计算机图像处理-均值滤波

均值滤波 线性滤波器的原始数据与滤波结果是一种算术运算&#xff0c;即用加减乘除等运算实现&#xff0c;如均值滤波器&#xff08;模板内像素灰度值的平均值&#xff09;、高斯滤波器&#xff08;高斯加权平均值&#xff09;等。由于线性滤波器是算术运算&#xff0c;有固定…

Android Jetpack Compose之确定重组范围并优化重组

1.概述 Compose的重组是智能的&#xff0c;Composable函数在进行重组时会尽可能的跳过不必要的重组&#xff0c;只对需要变化的UI进行重组。那Compose是如何认定UI需要变化呢&#xff1f;或者换句话说Compose是如何确定重组的范围呢。如果重组随意的发生&#xff0c;那么对UI的…

LabVIEW开发实时自动化多物镜云计算全玻片成像装置

LabVIEW开发实时自动化多物镜云计算全玻片成像装置 数字病理学领域正在迅速发展&#xff0c;这主要是由于计算机处理能力、数据传输速度、软件创新和云存储解决方案方面的技术进步。因此&#xff0c;病理科室不仅将数字成像用于图像存档等简单任务&#xff0c;还用于远程病理学…

一些 dp 题

CYEZ 弹珠 key&#xff1a;思维题&#xff0c;完全背包。 先每个组分一个小球。等价于 n − k n-k n−k 拆分为任意个 [ 1 , k ] [1,k] [1,k] 的数的方案数。 本质是根据面积的转换&#xff0c;直观解释&#xff1a; 完全背包即可。代码。 No Bug No Game key&#xff1…

无人直播间

失败&#xff01;&#xff01; 采用 ffmpeg 技术进行推流 推流代码&#xff1a; 【需要将rtmp替换为你的推流地址】 ffmpeg -re -stream_loop -1 -i "rain.mp4" -c copy -f flv ""推流地址获取 以哔哩哔哩为例 点击下方链接 开播设置 - 个人中心 - …

Java编程技巧:文件上传、下载、预览

目录 1、上传文件1.1、代码1.2、postman测试截图 2、下载resources目录中的模板文件2.1、项目结构2.2、代码2.3、使用场景 3、预览文件3.1、项目结构3.2、代码3.3、使用场景 1、上传文件 1.1、代码 PostMapping("/uploadFile") public String uploadFile(Multipart…