当前位置: 首页 > article >正文

Java12~Java17部分常用的新特性总结

目录前言Java121.switch表达式2.低延迟垃圾回收器ShenandoahJava131.文本块升级Java141.更优雅的instanceof2.Record记录类Java151.Sealed密封类Java16Java17前言上一篇文章和大家分享的是 Java9~Java11 的常用新特性这篇就再和大家分享一下 Java12~Java17 部分常用的新特性吧。Java121.switch表达式新的 switch-case 语法最早出现于 Java12而在 Java12 和 Java13 中都是预览特性在 Java14 中才成为了标准特性。传统的 switch-case我们需要去写 break否则就会发生穿透现象而新的 switch-case 不用再写 break了同时 switch-case 也成了一个表达式我们能够定义变量去拿到 switch-case 的返回值。下面的代码是新旧 switch-case 的语法案例如下⬇️⬇️⬇️package com.alibaba.one; import java.util.Scanner; public class SwitchTest { private static Scanner input new Scanner(System.in); private static void oldSwitchCase() { System.out.print(请输入汽车代号); int carCode input.nextInt(); switch (carCode) { case 1: System.out.println(奔驰); break; case 2: System.out.println(宝马); break; case 3: System.out.println(奥迪); break; // 可选 default: System.out.println(未知); break; } } private static void newSwitchCase() { System.out.print(请输入汽车代号); int carCode input.nextInt(); switch (carCode) { case 1 - System.out.println(奔驰); case 2 - System.out.println(宝马); case 3 - System.out.println(奥迪); // 可选 default - System.out.println(未知); } } private static void newSwitchCase2() { System.out.print(请输入汽车代号); int carCode input.nextInt(); String carBrand switch (carCode) { case 1 - 奔驰; case 2 - 宝马; case 3 - 奥迪; // 必选 default - 未知; }; System.out.println(carBrand); } private static void newSwitchCase3() { System.out.print(请输入汽车代号); int carCode input.nextInt(); String carBrand switch (carCode) { case 1, 2, 3 - 一线豪华品牌; case 4, 5 - 二线豪华品牌; // 必选 default - 未知; }; System.out.println(carBrand); } public static void main(String[] args) { oldSwitchCase(); newSwitchCase(); newSwitchCase2(); newSwitchCase3(); } } /* 请输入汽车代号1 奔驰 请输入汽车代号2 宝马 请输入汽车代号3 奥迪 请输入汽车代号4 二线豪华品牌 */2.低延迟垃圾回收器Shenandoah这个低延迟垃圾回收器 Shenandoah 在 Java12 中还是实验特性在 Java15 中成为了标准特性。下面把尚硅谷谷姐的图拿过来给大家参考有兴趣的可以去了解一下这些GC ⬇️⬇️⬇️Java131.文本块升级新的文本块写法最早出现于 Java13而在 Java13、Java14 中都是预览特性在 Java15中才成为标准特性。新的文本块使用三个双引号作为开始和结束分隔符开始分隔符后面不能跟内容更多针对的是 JSON、XML、SQL语句拼接等文本块会自动去除每行开头和结尾的非必要空格如需保留需要使用 \s 转义相对缩进会被保留文本块内部行终止符会被保留如果想要显式消除行终止符需要使用 \ 转义。案例如下⬇️⬇️⬇️package com.alibaba.three; public class TextBlockTest { private static void beforeJava15TextBlock() { String json {\n \name\: \张三\,\n \age\: 25,\n \hobby\: [\睡觉\, \吃饭\]\n }; System.out.println(json); } private static void afterJava15TextBlock() { // \s表示空格 String json { name: 张三,\s\s age: 25, hobby: [睡觉, 吃饭] }; System.out.println(json); } public static void main(String[] args) { beforeJava15TextBlock(); afterJava15TextBlock(); } } /* { name: 张三, age: 25, hobby: [睡觉, 吃饭] } { name: 张三, age: 25, hobby: [睡觉, 吃饭] } */Java141.更优雅的instanceofinstanceof 类型匹配的新语法最早出现于 Java14是预览特性而在 Java16中才成为标准特性。案例如下⬇️⬇️⬇️package com.alibaba.two; public abstract class Animal { public abstract void eat(); }package com.alibaba.two; public class Cat extends Animal { Override public void eat() { System.out.println(猫在吃小鱼...); } public void catchMouse() { System.out.println(抓老鼠...); } }package com.alibaba.two; public class Dog extends Animal { Override public void eat() { System.out.println(狗在啃骨头...); } public void watchDoor() { System.out.println(看大门...); } }package com.alibaba.two; import java.util.Scanner; public class InstanceOfTest { private static Scanner input new Scanner(System.in); public static void beforeJava16InstanceOf() { System.out.print(请输入动物种类); String animalType input.next(); Animal animal switch (animalType) { case cat - new Cat(); case dog - new Dog(); default - null; }; if (null ! animal) { animal.eat(); if (animal instanceof Cat) { Cat cat (Cat) animal; cat.catchMouse(); } else if (animal instanceof Dog) { Dog dog (Dog) animal; dog.watchDoor(); } } } public static void afterJava16InstanceOf() { System.out.print(请输入动物种类); String animalType input.next(); Animal animal switch (animalType) { case cat - new Cat(); case dog - new Dog(); default - null; }; if (null ! animal) { animal.eat(); if (animal instanceof Cat cat) { cat.catchMouse(); } else if (animal instanceof Dog dog) { dog.watchDoor(); } } } public static void main(String[] args) { beforeJava16InstanceOf(); afterJava16InstanceOf(); } } /* 请输入动物种类cat 猫在吃小鱼... 抓老鼠... 请输入动物种类dog 狗在啃骨头... 看大门... */2.Record记录类Record 记录类的新语法最早出现于 Java14是预览特性而在 Java16中才成为标准特性。基本语法是public record 记录类名(实例变量列表) { // 可选自定义方法、静态变量 }记录类会生成为每个实例变量加上 private final 修饰、全参构造、get方法方法名不带get、equals、hashCode、toString方法。案例如下⬇️⬇️⬇️package com.alibaba.four; public record Employee(String name, Integer age, String email) { /** * 已包含如下代码 * private final String name; * private final Integer age; * private final String email; * 全参构造 * get方法注意这里的方法名是不带get的直接就是变量名 * equals、hashCode、toString方法 */ // 如果要自定义额外的代码逻辑举例如下 public static final Integer MAX_VALUE Integer.MAX_VALUE; public Employee { // 以下判断只是针对记录类而言实际对入参的判断建议使用校验注解NotBlank、NotNull、Min、Max等 if (null name || name.isEmpty()) { throw new IllegalArgumentException(姓名不能为空 name); } if (age 0) { throw new IllegalArgumentException(年龄不能为负数 age); } if (null email || !email.contains()) { throw new IllegalArgumentException(邮箱地址不合法 email); } } public boolean isAdult() { return age 18; } Override public String toString() { return String.format(Employee(name %s, age %d), name(), age()); } }package com.alibaba.four; public class RecordTest { public static void main(String[] args) { Employee employee1 new Employee(张三, 25, 123qq.com); Employee employee2 new Employee(李四, 17, 888163.com); System.out.println(employee1.name()); System.out.println(employee1.age()); System.out.println(employee1.email()); System.out.println(employee2.isAdult()); System.out.println(employee1.equals(employee2)); System.out.println(employee2); System.out.println(Employee.MAX_VALUE); } } /* 张三 25 123qq.com false false Employee(name 李四, age 17) 2147483647 */Java151.Sealed密封类Sealed 密封类最早出现于 Java15是预览特性而在 Java17中才成为标准特性。基本语法是public sealed class 密封类名 [可选 extends 父类 implements 接口] permits 子类1, 子类2, 子类3 { // 代码逻辑 }密封类是指定该类只能被你指定的这些子类继承同时密封类的直接子类必须使用 sealed、non-sealed、final 的其中一个去修饰sealed 继续密封、non-sealed 解除密封、final 最终。如果密封类A的子类B采用 sealed 修饰那么这个子类B仍然是密封类需继续按照密封类的约束去编写如果密封类A的子类B采用 non-sealed 修饰那么这个子类B解除密封继承子类B的其他子类没有任何约束直接 public class 即可和普通类一致。如果密封类A的子类B采用 final 修饰那么这个子类B不能被任何类继承。案例如下⬇️⬇️⬇️package com.alibaba.five; /** * sealed密封限制指定MercedesBenz, BMW, Audi三个类才可以继承 */ public abstract sealed class Car permits MercedesBenz, BMW, Audi { public abstract void highPerformance(); }package com.alibaba.five; /** * final不能再被继承 */ public final class MercedesBenz extends Car { Override public void highPerformance() { System.out.println(MercedesBenz AMG E63); } }package com.alibaba.five; /** * non-sealed解除密封限制可以被任意public class的类继承 */ public non-sealed class BMW extends Car { Override public void highPerformance() { System.out.println(BMW M5); } }package com.alibaba.five; /** * sealed继续保持密封指定谁才可以继承 */ public sealed class Audi extends Car permits YiQiAudi { Override public void highPerformance() { System.out.println(Audi RS7); } }package com.alibaba.five; public final class YiQiAudi extends Audi { }package com.alibaba.five; import java.util.ArrayList; import java.util.List; public class SealedTest { public static void main(String[] args) { ListCar cars new ArrayList(); cars.add(new MercedesBenz()); cars.add(new BMW()); cars.add(new Audi()); for (Car car : cars) { car.highPerformance(); } Audi audi new YiQiAudi(); System.out.println(audi); } } /* MercedesBenz AMG E63 BMW M5 Audi RS7 com.alibaba.five.YiQiAudi6d311334 */那么到此我们就见识到 Java 中有这些类普通类 public class最终类 final class抽象类 abstract class包含 public interface枚举类 public enum注解类 public interface记录类 public record密封类 public sealed classJava16Java16 主要就是将 Java14 中的 Record 记录类、instanceof、打包工具 jpackage 这些预览特性变成了标准特性所以大家直接参考上面的 Java14即可。Java17Java17 首先将 Java15 中的 Sealed 密封类从预览特性变成了标准特性。那么针对 Java17 了话在之前的版本中很多常用的、不错的特性发展到这里都已经成为了标准特性、稳定的功能所以如果大家想使用这些功能建议大家直接安装 jdk17 就可以了因为未来这个版本也将会是一个主流。那么分享到这里就结束了大家学习这些新特性的时候更多的针对Java8、Java17、Java21这三个版本就可以了。

相关文章:

Java12~Java17部分常用的新特性总结

目录 前言 Java12 1.switch表达式 2.低延迟垃圾回收器Shenandoah Java13 1.文本块升级 Java14 1.更优雅的instanceof 2.Record记录类 Java15 1.Sealed密封类 Java16 Java17 前言 上一篇文章和大家分享的是 Java9~Java11 的常用新特性,这篇就再和大家分…...

YOLOv26篮球运动员检测系统:9类关键目标识别(附mAP 86.5%实测)(项目源码+数据集+模型权重+UI界面+python+深度学习+远程环境部署)

摘要 本文基于YOLO26目标检测算法,构建了一套面向篮球比赛场景的多类别目标检测系统。该系统能够自动识别篮球比赛视频中的9类关键目标:篮球(Ball)、篮筐(Hoop)、比赛节数(Period)、运动员(Player)、裁判(Ref)、进攻计时器(Shot Clock)、队名(Team Name…...

拿森智能获IPO备案:拟港交所上市

雷递网 乐天 4月19日拿森智能科技(浙江)股份有限公司日前获证监会IPO备案,拿到了上市的钥匙。拿森智能拟发行不超过109,058,400股境外上市普通股并在香港联合交易所上市。2026年4月17日,首创证券股份有限公司、深圳市星源材质科技…...

手把手教你用YOLO26训练轴承缺陷检测(项目源码+数据集+模型权重+UI界面+python+深度学习+远程环境部署)

摘要 轴承作为机械设备中的核心零部件,其表面缺陷的自动检测对保障设备安全运行具有重要意义。本研究基于YOLO26目标检测算法,构建了一套针对轴承表面四种典型缺陷(aocao、aoxian、cashang、huahen)的智能识别检测系统。系统采用…...

首创证券冲刺港股:年营收36亿 期内利润4.9亿 已获IPO备案

雷递网 雷建平 4月19日首创证券股份有限公司(简称:“首创证券”)日前更新招股书,准备在港交所上市。首创证券已获IPO备案,拿到了上市的钥匙。2026年4月17日,首创证券股份有限公司、深圳市星源材质科技股份有…...

YOLO26实战:红外森林火灾与烟雾识别系统(项目源码+数据集+模型权重+UI界面+python+深度学习+远程环境部署)

摘要 森林火灾是破坏生态环境、威胁人类生命财产安全的重大自然灾害之一。传统火灾监测手段存在响应慢、覆盖范围有限等问题。本系统基于YOLO26目标检测算法,构建了一套针对红外森林火灾烟雾识别检测系统。系统以红外图像为输入,可同时识别“火灾”&…...

Charles + Proxifier 抓包实战:从环境搭建到疑难解析

1. 环境准备:搭建抓包基础设施 搞开发的朋友们应该都遇到过这样的场景:某个本地应用死活不走系统代理,你想抓它的包就像追一只不按套路跑的野猫。这时候CharlesProxifier的组合就像专业驯猫师,今天我就带你们从零开始搭建这个黄金…...

如何用ViGEmBus解决Windows游戏手柄兼容性难题:完整指南

如何用ViGEmBus解决Windows游戏手柄兼容性难题:完整指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 还在为Windows游戏手柄兼容性发愁吗&…...

2026年怎么安装OpenClaw?京东云1分钟萌新教程含大模型API与Skill配置

2026年怎么安装OpenClaw?京东云1分钟萌新教程含大模型API与Skill配置。OpenClaw(前身为Clawdbot/Moltbot)作为开源、本地优先的AI助理框架,凭借724小时在线响应、多任务自动化执行、跨平台协同等核心能力,成为个人办公…...

保姆级教程:在CentOS 8上为ESP32-S3编译带OV2640摄像头驱动的MicroPython固件

从零构建ESP32-S3的MicroPython固件:OV2640摄像头驱动全流程解析 在物联网和嵌入式开发领域,ESP32-S3凭借其出色的性能和丰富的外设接口,成为众多开发者的首选平台。而MicroPython作为Python在嵌入式系统的实现,大大降低了开发门槛…...

野火指南者STM32F103VET6上,用FreeModbus v1.6实现Modbus RTU从站,这5个文件是关键

野火指南者STM32F103VET6上FreeModbus移植的五个核心文件解析 移植FreeModbus协议栈到嵌入式平台时,很多开发者都会遇到相似的困惑——明明按照教程一步步操作,却总是卡在某些关键环节无法正常工作。本文将深入剖析野火指南者开发板(STM32F10…...

图解LeetCode风格:如何优雅地处理‘中序遍历’和‘层序遍历’序列重建二叉树?

二叉树双序列重建实战:中序层序的高效解法与视觉化拆解 在技术面试中,二叉树重建类问题堪称经典中的经典。当面试官给出中序和层序遍历序列,要求你重建原始二叉树时,很多候选人会突然卡壳——毕竟比起常见的中序先序组合&#xff…...

DeepSeek-R1-Distill-Qwen-1.5B实战体验:轻量级AI模型效果实测

DeepSeek-R1-Distill-Qwen-1.5B实战体验:轻量级AI模型效果实测 1. 模型概览与技术特点 DeepSeek-R1-Distill-Qwen-1.5B是DeepSeek团队推出的轻量化语言模型,基于Qwen2.5-Math-1.5B基础模型通过知识蒸馏技术优化而来。这款1.5B参数的模型特别适合资源受…...

【AGI视觉理解与空间推理突破指南】:20年一线专家解密3大认知瓶颈与5步落地路径

第一章:AGI视觉理解与空间推理的范式跃迁 2026奇点智能技术大会(https://ml-summit.org) 传统计算机视觉系统长期依赖监督学习范式,将图像识别简化为高维特征到离散标签的映射,其空间推理能力受限于静态数据分布与固定任务边界。而新一代AG…...

OpenBMC烧录到SD卡后,如何通过网页管理界面配置网络和用户?

OpenBMC网页管理界面配置指南:从网络设置到用户管理 当你第一次将OpenBMC镜像成功烧录到树莓派的SD卡并启动系统后,面对这个强大的基板管理控制器,可能会有些不知所措。本文将带你一步步完成从首次登录到完整配置的全过程,让你的…...

讯为IMX6Q开发板TF卡启动踩坑记:手把手教你修复‘MMC: no card present’报错

讯为IMX6Q开发板TF卡启动异常全解析:从硬件原理到uboot调试实战 最近在调试讯为IMX6Q开发板的TF卡启动功能时,遇到了经典的"MMC: no card present"报错。这个看似简单的提示背后,其实隐藏着硬件设计、引脚映射、uboot驱动配置等一系…...

解锁NVIDIA显卡隐藏性能:探索Profile Inspector的200+秘密参数

解锁NVIDIA显卡隐藏性能:探索Profile Inspector的200秘密参数 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否曾好奇,为什么同样的显卡在不同游戏中表现差异巨大&#xff…...

MelonLoader终极指南:Unity游戏模组加载器的完整使用教程

MelonLoader终极指南:Unity游戏模组加载器的完整使用教程 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader MelonLoad…...

从永恒之蓝到勒索病毒:给运维和开发者的Windows Server端口管理与补丁更新实操指南

从永恒之蓝到勒索病毒:Windows Server端口管理与补丁更新实战手册 在数字化浪潮中,服务器安全如同现代城堡的护城河。2017年爆发的WannaCry勒索病毒事件,让全球企业意识到一个未打补丁的SMB端口可能引发的连锁反应。这场以MS17-010漏洞为入口…...

别再复制粘贴了!详解4脚OLED的I2C驱动原理与代码逐行分析

深入解析4脚OLED的I2C驱动:从时序到代码实现 在嵌入式开发中,OLED显示屏因其高对比度、低功耗和快速响应等优势,成为许多项目的首选显示方案。而I2C接口的4脚OLED更是因其简洁的硬件连接和易于控制的特性,受到广大开发者的青睐。本…...

从MATLAB频谱到SignalTap波形:深度调试FPGA中的DDS+ADC/DAC数据链

从MATLAB频谱到SignalTap波形:FPGA中DDS与ADC/DAC数据链的深度调试实战 在FPGA开发中,构建一个完整的数字信号处理链路往往只是第一步。真正的挑战在于如何验证系统性能、定位潜在问题并进行精确调优。本文将带您深入探索基于DDS(直接数字频…...

rk3568_总线设备模型匹配机制_注册dev

device注册过程1、首先将dev放入核的device链表中(platform_device_register) 2、将dev和内核中的驱动进行表较,若匹配则不进行后续比较,若不匹配,则一直比较直到遍历完所有的drv 3、匹配成功进入对应驱动的probe函数 platform_device_regist…...

别只美化桌面了!Ubuntu 20.04装完后的硬件驱动调优与GNOME扩展推荐清单

Ubuntu 20.04硬件驱动调优与GNOME生产力扩展全指南 刚装完Ubuntu 20.04的兴奋感还没消退,你可能就发现了一些小问题:屏幕亮度调不了、触控板反应迟钝、外接设备识别异常...这些硬件兼容性问题确实让人头疼。但别急着放弃,这些问题大多有解。…...

Degrees of Lewdity汉化版终极教程:3步解决中文配置难题

Degrees of Lewdity汉化版终极教程:3步解决中文配置难题 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chinese-Localization …...

5步掌握G-Helper:华硕笔记本轻量控制工具的完整指南

5步掌握G-Helper:华硕笔记本轻量控制工具的完整指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar…...

运维工程师的浪漫:手把手教你用特殊字符在服务器上“画画”(从/etc/motd到Banner全攻略)

服务器上的艺术:用ASCII与Unicode打造个性化运维环境 1. 技术人的创意表达新维度 在大多数人眼中,服务器运维是冰冷命令行与枯燥配置的代名词。但当我们打开终端,登录系统时,那些跳动的字符其实可以成为展现个性的画布。从简单的A…...

Z-Image-Turbo_Sugar脸部Lora效果展示:低光照环境下Sugar面部细节保留能力

Z-Image-Turbo_Sugar脸部Lora效果展示:低光照环境下Sugar面部细节保留能力 1. 引言:当AI遇见光影艺术 想象一下,你正在为一个游戏角色设计一张在烛光晚宴中的特写。你需要她的脸庞在柔和的光线下依然清晰,皮肤质感细腻&#xff…...

蜘蛛池在 SEO 优化中的作用与合理使用方式

在做网站优化的过程中,很多站长都会遇到新站收录慢、页面抓取频率低、内容长时间不被索引等问题。尤其是中小型站点和新上线站点,本身权重不高,很难获得搜索引擎蜘蛛的持续访问,这时候合理运用蜘蛛池,就可以有效改善站…...

EagleEye效果对比:相同4090显卡下,TinyNAS模型比YOLOv5s提速2.8倍

EagleEye效果对比:相同4090显卡下,TinyNAS模型比YOLOv5s提速2.8倍 基于 DAMO-YOLO TinyNAS 架构的毫秒级目标检测引擎 1. 项目概述 EagleEye是一款专为高并发、低延迟场景设计的智能视觉分析系统。该系统采用了达摩院最新的DAMO-YOLO架构,结…...

抖音下载器终极指南:免费批量下载无水印视频的完整解决方案

抖音下载器终极指南:免费批量下载无水印视频的完整解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...