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

java switch及其新特性

switch是什么

在Java中,switch语句是一种多分支选择结构,它允许程序根据一个表达式的值从多个代码块中选择执行哪一个。switch语句通常比多个if-else语句更清晰、更易读。

Java switch语句的基本语法:

switch (expression) {case value1:// 当 expression 的值等于 value1 时执行的代码break;case value2:// 当 expression 的值等于 value2 时执行的代码break;// 可以有任意数量的 case 语句default:// 如果 expression 的值与所有 case 值都不匹配,则执行这里的代码
}

关键点:

  • 表达式 (expression):可以是byte, short, int, 或者char类型。从Java 5开始,还可以使用枚举类型。从Java 7开始,支持String类型作为表达式。
  • case标签 (case value:):每个case后面跟着一个要比较的值和冒号。这个值必须与表达式的类型兼容,并且不能重复。
  • break语句:用于终止switch语句中的一个特定路径。如果不包含break,控制流将继续执行下一个case,直到遇到break或switch语句结束。这种行为称为“fall-through”。
  • default标签:可选,默认情况下执行的代码块,如果没有任何case匹配表达式的值时将执行这段代码。

示例如下

在这里插入图片描述

Java 12+ 新特性

1. 箭头 -> 替代冒号 :

从Java 12开始,switch语句有了新的增强,包括箭头(->)来替代传统的冒号(:),并且默认不再需要break语句来防止fall-through。此外,Java 14引入了预览版的模式匹配switch表达式,允许直接返回值而不需要额外的return语句。例如:
在这里插入图片描述

至少代码量倒是直接少了不少

2. 自动断言(Automatic Break)

在新的switch表达式中,当使用箭头(->)时,每个case分支默认自动包含了一个隐式的break,从而避免了传统的fall-through行为。这意味着你不再需要显式地为每个case添加break语句。
在这里插入图片描述

3. switch 表达式

从Java 14起,switch不仅可以作为语句使用,还可以作为一个表达式,它能够返回值。这使得switch可以被用作赋值的一部分或者直接返回函数的结果。
在这里插入图片描述

4. 多个 case 标签合并

你可以将多个具有相同处理逻辑的case标签组合在一起,使用逗号分隔。这种方式可以减少重复代码,使程序更加简洁。

在这里插入图片描述

5. yield 关键字

当switch作为一个表达式使用时,如果需要在case体内执行多条语句,并且最后返回一个值,可以使用yield关键字。yield会将控制权交还给调用者,并传递一个值。
在这里插入图片描述

相关文章:

java switch及其新特性

switch是什么 在Java中,switch语句是一种多分支选择结构,它允许程序根据一个表达式的值从多个代码块中选择执行哪一个。switch语句通常比多个if-else语句更清晰、更易读。 Java switch语句的基本语法: switch (expression) {case value1:/…...

E卷-货币单位换算(100分)

货币单位换算 问题描述 在一个多国货币记账本中,记录了若干条不同货币的金额。现在需要将这些金额全部转换成人民币分(fen),并进行汇总。每条记录可能包含单独的元、单独的分,或者元与分的组合。转换时,需要考虑不同货币之间的汇率关系。 要求将这些货币全部换算成人民…...

什么是MMD Maximum Mean Discrepancy 最大均值差异?

9多次在迁移学习看到了,居然还是Bernhard Schlkopf大佬的论文,仔细看看。 一.什么是MMD? 1. MMD要做什么? 判断两个样本(族)是不是来自于同一分布 2.怎么做?(直观上)…...

沐风老师3DMAX摄相机阵列插件使用方法

3DMAX摄相机阵列插件,从网格对象或样条线的顶点法线快速创建摄相机阵列。该插件从网格的顶点或样条线的节点获取每个摄影机的位置和方向。 3DMAX摄相机阵列插件支持目前3dMax主流的物理相机、标准相机、VRay物理相机。 【版本要求】 3dMax 2015及更高版本 【安装方…...

Java Web 开发学习中:过滤器与 Ajax 异步请求

一、过滤器 Filter: 过滤器的概念与用途 在一个庞大的 Web 应用中,有许多资源需要受到保护或进行特定的预处理。过滤器就像是一位智能的守卫,站在资源的入口处,根据预先设定的规则,决定哪些请求可以顺利访问资源&…...

数据结构 (36)各种排序方法的综合比较

一、常见排序方法分类 插入排序类 直接插入排序:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。希尔排序:是插入排序的一种改进版本,先将整个待排序的记录序列分割成为…...

使用vue搭建不需要打包的前端项目

需求详情:用户不要项目进行打包,开发还是选用vue2,且需要便于上手 项目目录 >api 存放api.js,主要是前端用到的接口 >css >>>fonts 存放页面需要的字体文件 >>>1.css 存放所有css文件 >data 存放echarts…...

发布订阅者=>fiber=>虚拟dom

文章目录 vue的响应式原理-发布订阅者模式vue3 响应式原理及优化fiberfiber 与 虚拟dom vue的响应式原理-发布订阅者模式 Vue响应式原理概述 Vue.js的响应式原理是其核心特性之一。它使得当数据发生变化时,与之绑定的DOM元素能够自动更新。其主要基于数据劫持和发布…...

Python-计算机中的码制以及基础运算符(用于分析内存)

记录python学习,直到学会基本的爬虫,使用python搭建接口自动化测试就算学会了,在进阶webui自动化,app自动化 python基础2-码制 计算机中的码制原码(True Form)反码(Ones Complement&#xff09…...

yum 离线软件安装

适用范围 支持YUM软件管理的操作系统: 银河麒麟 服务器操作系统V10统信服务器操作系统V20CentOS 系列 准备 准备一台可以连接互联网并且与离线安装的操作系统相同版本的操作系统,包括指令集类型相同。 安装下载工具 查询是否已经安装下载工具 yum…...

【C语言】17. 数据在内存中的存储

文章目录 一、整数在内存中的存储二、⼤⼩端字节序和字节序判断1、什么是⼤⼩端?2、为什么有⼤⼩端?3、练习1)练习12)练习23)练习34)练习45) 练习56)练习6 三、浮点数在内存中的存储1、浮点数的…...

二叉树概述

目录 一、二叉树的基本结构 二、二叉树的遍历 1.前序 2.中序 3.后序 4.层序遍历 三.计算二叉树的相关参数 1.计算节点总个数 2.计算叶子节点的个数 3.计算树的高度 4.计算第k层的子树个数 5.查找树中val为x的节点 四.刷题 1.单值二叉树 2.检查两棵树是否相同 3.一…...

【开源免费】基于SpringBoot+Vue.JS图书进销存管理系统(JAVA毕业设计)

博主说明:本文项目编号 T 082 ,文末自助获取源码 \color{red}{T082,文末自助获取源码} T082,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...

惠普M126a连接共享打印机故障0x000006ba,系统不支持请求的命令,print spooler重复停止

故障说明:直连惠普M126a打印机正常打印,通过共享连接的报故障。 目前已知有三种故障: 1、0x000006ba报错2、系统不支持请求的命令3、print spooler重复停止(或者,print spooler没有停止依然报故障) 解决方…...

Chainlit集成LlamaIndex实现一个通过用户聊天对话的酒店预定系统

Agent 简介 “Agent”是一个自动推理和决策引擎。它接受用户输入/查询,并为执行该查询做出内部决策,以便返回正确的结果。关键的代理组件可以包括但不限于: 把复杂的问题分解成小问题选择要使用的外部工具+调用工具的参数计划一系列的任务将以前完成的任务存储在内存模块中…...

计算机网络之网络层超详细讲解

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络之网络层超详细讲解 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 …...

代码随想录算法训练营day51|动态规划part13

回文子串 回文子串这里的递推式不太一样,dp[i] 和 dp[i-1] ,dp[i 1] 看上去都没啥关系。所以要回归到回文的定义 而我们发现,判断一个子字符串(字符串下标范围[i,j])是否回文,依赖于,子字符串…...

ESP8266自制桌宠机器狗

看到别人的桌宠机器狗有没有想要拥有一台的冲动,其实我们可以使用少量的资金自制一台机器狗 1 硬件 esp8266芯片 舵机 超声波传感器 2 接线 ESP8266配件...

【力扣】409.最长回文串

问题描述 思路解析 因为同时包含大小写字母,直接创建个ASCII表大小的桶来标记又因为是要回文子串,所以偶数个数的一定可以那么同时,对于出现奇数次数的,我没需要他们的次数-1,变为偶数,并且可以标记出现过…...

git 拉取代码时报错 gitignore Please move or remove them before you merge.

git 拉取代码时报错, The following untracked working tree files would be overwritten by merge: .gitignore Please move or remove them before you merge. 当你在使用 Git 进行代码拉取(通常是执行 git pull 或 git merge 命令)时遇到这…...

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

Robots.txt 文件

什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...