java基础概念07-switch语句

news2024/12/28 23:49:27

一、switch定义 

二、基本语法

switch (expression) {  
    case value1:  
        // 当expression的值等于value1时执行的代码  
        break; // 可选  
    case value2:  
        // 当expression的值等于value2时执行的代码  
        break; // 可选  
    // 你可以有任意数量的case语句  
    default: // 可选  
        // 当没有case匹配时执行的代码  
}
  • expression:这是被评估的表达式,其结果必须与case标签后面的值进行比较。从Java 7开始,switch语句的表达式可以是String类型,或其他枚举类型,但在此之前,它只能是:byte、short、char、int、Character、Byte、Short、Integer、String(Java 7及以上版本)、Enum(Java 5及以上版本)的包装类或这些类型的表达式。
  • break省略:导致case穿透!!!

2-1、case穿透

就是语句体中没有写break导致的。

执行流程:

首先还是会拿着小括号中表达式的值跟下面每一个case进行匹配。如果匹配上了,就会执行对应的语句体,如果此时发现了break,那么结束整个switch语句。如果没有发现break,那么程序会继续执行下一个case的语句体,一直遇到break或者右大括号为止。 

使用场景:

如果多个case语句重复了,可以使用case穿透简化代码。

三、switch表达式(新特性)

3-1、简化写法

3-2、预览功能

从Java 12开始,Java引入了switch表达式作为预览功能(Preview Feature)。switch表达式与传统的switch语句不同,它必须返回一个值,并且其语法更加紧凑和灵活。

 

1、基本语法

<Type> result = switch (expression) {  
    case value1 -> {  
        // 当expression的值等于value1时执行的代码,并返回结果  
        // 可以是单一表达式或代码块  
    }  
    case value2 -> result2; // 单一表达式  
    // 可以有多个case  
    default -> {  
        // 当没有case匹配时执行的代码,并返回结果  
        // 可以是单一表达式或代码块  
    }  
};
  • <Type>switch表达式必须返回的类型。
  • ->符号用于分隔每个case的条件和该条件满足时要执行(并返回)的表达式或代码块。
  • 如果case后面跟的是代码块(即使用大括号{}包围的代码),则代码块内的最后一条语句(或显式返回语句)的结果将作为该case的返回值。
  • 如果没有default分支,且没有case匹配,则编译时会报错(除非使用了yield关键字,这是后续版本中的增强)。
  • case中可以不写break,不会有穿透现象

示例:

String dayOfWeek = switch (day) {  
    case MONDAY, FRIDAY, SUNDAY -> "Weekend vibes";  
    case TUESDAY -> "Midweek struggles";  
    case THURSDAY -> "Almost there!";  
    case WEDNESDAY, SATURDAY -> {  
        // 使用代码块进行更复杂的操作  
        System.out.println("Special day!");  
        yield "Special treatment";  
    }  
    default -> "Unknown day";  
};  
  
System.out.println(dayOfWeek);

注意:上面的yield关键字是Java 14中引入的,用于在switch表达式的代码块中显式地提供返回值。

在Java 12和13中,如果你需要在case的代码块中返回值,你必须使用返回语句(如return),但这通常意味着switch表达式需要嵌套在一个更大的方法中,因为switch表达式本身不能包含返回语句(除非它是方法的一部分)。

四、switch vs if

  • if:一般用于对范围的判断;
  • switch:把有限个数据一一列举出来,让我们任选其一。

五、练习题

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Android驱动06】GMS兼容性测试CTS --环境搭建、测试执行、结果分析

CTS即Compatibility Test Suite意为兼容性测试&#xff0c;是Google推出的Android平台兼容性测试机制。其目的是尽早发现不兼容性&#xff0c;并确保软件在整个开发过程中保持兼容性。只有通过CTS认证的设备才能合法的安装并使用Google market等Google应用。 一&#xff0c;搭…

leetcode 二叉树专题——java实现

1. 二叉树中序遍历 给一棵树&#xff0c;输出中序遍历。 树已经给你建好了&#xff0c;按照一下形式&#xff1a; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* Tree…

花10分钟写个漂亮的后端API接口模板!

你好&#xff0c;我是田哥 在这微服务架构盛行的黄金时段&#xff0c;加上越来越多的前后端分离&#xff0c;导致后端API接口规范变得越来越重要了。 比如&#xff1a;统一返回参数形式、统一返回码、统一异常处理、集成swagger等。 目的主要是规范后端项目代码&#xff0c;以及…

数据恢复大师免费版落伍了吗?2024年4大创新恢复工具对比评测

在这个数字时代&#xff0c;要是突然发现电脑里的珍贵照片、视频或者重要文件不见了&#xff0c;那种感觉就像失去了什么重要的东西&#xff0c;让人焦虑又无助。市面上虽然有很多数据恢复软件&#xff0c;但不是所有软件都能满足我们的需求&#xff0c;尤其是那些既免费又好用…

一键解析:由于找不到xinput1_3.dll,无法继续执行代码的问题,有效修复xinput1_3.dll文件

xinput1_3.dll是一个重要的动态链接库文件&#xff0c;它是DirectX软件包的一部分&#xff0c;主要负责处理游戏和多媒体应用程序中的输入功能。当用户尝试启动某些游戏或应用程序时&#xff0c;可能会遇到一个错误提示&#xff0c;指出“由于找不到xinput1_3.dll&#xff0c;无…

开源AI智能名片拓客小程序在企业品牌快速打造中的应用探索

摘要&#xff1a;在数字化浪潮席卷全球的今天&#xff0c;企业品牌的建设与传播已不再局限于传统的广告与营销手段。开源AI智能名片拓客小程序作为一种创新的数字营销工具&#xff0c;凭借其智能化、个性化及高效化的特点&#xff0c;正逐步成为企业品牌快速打造与提升市场影响…

游戏类型有哪些?游戏分类详细解说(一)

这篇文章是来源于游戏工委牵头制定的团体标准&#xff1a;《网络游戏分类》&#xff08;音数协 2023年1月&#xff0c;征求意见稿&#xff09;。 音数协游戏工委是游戏行业自律组织&#xff0c;在其牵头组织下&#xff0c;腾讯、网易、盛趣、索尼、完美世界、巨人网络等单位共…

MTK6983/MT6983天玑9000芯片详细性能参数_MTK联发科5G方案定制

联发科MT6983旗舰5G移动平台处理器集成了蓝牙、FM、WLAN 和 GPS 模块&#xff0c;是一个高度集成的基带平台&#xff0c;集成了调制解调器和应用处理子系统&#xff0c;可支持 LTE/LTE-A/NR 和 C2K 智能手机应用。 该芯片集成了四个 Arm Matterhorn (ELP) 内核、四个 Arm Klein…

Java | Leetcode Java题解之第304题二维区域和检索-矩阵不可变

题目&#xff1a; 题解&#xff1a; class NumMatrix {int[][] sums;public NumMatrix(int[][] matrix) {int m matrix.length;if (m > 0) {int n matrix[0].length;sums new int[m 1][n 1];for (int i 0; i < m; i) {for (int j 0; j < n; j) {sums[i 1][j …

视图库对接系列(GA-T 1400)二十二、视图库对接系列(级联)校时

背景 校时接口一般用的比较少&#xff0c;一般用的话就注册上级成功之后会发送 一个校时&#xff0c;告诉服务端目前客户端的时间情况。 实现 这个实现的话&#xff0c;我们再注册的时候就已经实现了&#xff0c;注册成功就会发送一次校时 先看抓包 具体实现代码 service接…

【转型必看】Java到AI,程序员的逆袭秘籍,转行人工智能不再是梦!

随着技术的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域&#xff0c;如Java&#xff0c;转向人工智能领域&#xff0c;今天小编和大家一起来探讨Java开发者是否可以转型到人工智能&a…

「JavaEE」Spring IoC 1:Bean 的存储

&#x1f387;个人主页 &#x1f387;所属专栏&#xff1a;Spring &#x1f387;欢迎点赞收藏加关注哦&#xff01; IoC 简介 IoC 全称 Inversion of Control&#xff0c;即控制反转 控制反转是指控制权反转&#xff1a;获得依赖对象的过程被反转了 传统开发模式中&…

38 Debian如何配置Keepalived+LVS+NFS实现高可用负载均衡

作者:网络傅老师 特别提示:未经作者允许,不得转载任何内容。违者必究! Debian如何配置Keepalived+LVS+NFS实现高可用负载均衡 《傅老师Debian知识库系列之38》——原创 ==前言== 傅老师Debian知识库特点: 1、拆解Debian实用技能; 2、所有操作在VMware虚拟机实测完成;…

C# Unity 面向对象补全计划 之 初识继承方法与多态

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列旨在通过补全学习之后&#xff0c;给出任意类图都能实现并做到逻辑上严丝合缝 1.继承方法 C# & Unity 面向对象补全计划 之 继承&#xff08;字段与属性&…

什么是五力分析?5分钟带你了解它在企业财务经营中的应用与价值!

如今&#xff0c;随着全球化进程的不断加速&#xff0c;市场环境复杂多变&#xff0c;市场竞争日益激烈&#xff0c;财务经营已经成为了企业应对复杂市场环境、保持自身竞争力的关键。体系化的五力分析平台能够为企业提供一套全面的解决方案&#xff0c;帮助企业在盈利能力、偿…

重生奇迹MU 多准备几套装备才能玩得更好

一、时装必须是要准备一套的 我相信每个玩家都非常注重时装&#xff0c;无论是哪个职业&#xff0c;都希望在平常场合下穿上时髦惊艳的服装。在勇者大陆中&#xff0c;这种操作很常见&#xff0c;几乎所有玩家都需要准备一套。 在游戏中&#xff0c;需要具备一套适合的装备才…

Java实现数据库图片上传(包含从数据库拿图片传递前端渲染)-图文详解

目录 1、前言&#xff1a; 2、数据库搭建 &#xff1a; 建表语句&#xff1a; 3、后端实现&#xff0c;将图片存储进数据库&#xff1a; 思想&#xff1a; 找到图片位置&#xff08;如下图操作&#xff09; 图片转为Fileinputstream流的工具类&#xff08;可直接copy&#…

【C++】模板的特化

文章目录 概念函数模板特化类模板特化全特化偏特化 概念 通常情况下&#xff0c;使用模板可以实现一些与类型无关的代码&#xff0c;但是有一些类型需要特殊处理&#xff0c;否则可能会得到一些错误的结果。 比如&#xff0c;在比较两个数的大小时&#xff0c;如果传入两个变量…

RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐

RAGAI工作流Agent&#xff1a;LLM框架该如何选择&#xff0c;全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐 1.MaxKB MaxKB Max Knowledge Base&#xff0c;是一款基于 LLM 大语言模型的开源知识库问答系统&#xff0c;旨在成为企业的最强大脑。它能够帮…

MySQL:存储引擎相关命令、性能比较

目录 存储引擎 概念 类型 示例 数据库文件 MylSAM .frm .MYD .MYI InnoDB .frm .ibd .opt 查看指定表的存储引擎类型 查看系统支持的存储引擎 修改存储引擎 通过配置文件指定存储引擎 使用alter修改 创建表的同时指定存储引擎 使用set命令临时指定存储引擎…