首页/新闻资讯/正文详情

【Java switch case 入门到进阶,新手一看就懂】

发布时间:2026/9/24 17:51:15 来源:云帆数科 栏目:资讯中心
【Java switch case 入门到进阶,新手一看就懂】
if…else 语句可以用来描述一个“二岔路口”我们只能选择其中一条路来继续走然而生活中经常会碰到“多岔路口”的情况。switch 语句提供了 if 语句的一个变通形式可以从多个语句块中选择其中的一个执行。switch 语句格式switch 语句是 Java 的多路分支语句。它提供了一种基于一个表达式的值来使程序执行不同部分的简单方法。因此它提供了一个比一系列 if-else-if 语句更好的选择。switch 语句的基本语法形式如下所示switch(表达式) { case 值1: 语句块1; break; case 值2: 语句块2; break; … case 值n: 语句块n; break; default: 语句块n1; break; }其中switch、case、default、break 都是 Java 的关键字。1switch表示“开关”这个开关就是 switch 关键字后面小括号里的值小括号里要放一个整型变量或字符型变量。表达式必须为 byteshortintchar类型。Java7 增强了 switch 语句的功能允许 switch 语句的控制表达式是 java.lang.String 类型的变量或表达式。只能是 java.lang.String 类型不能是 StringBuffer 或 StringBuilder 这两种字符串的类型。2case表示“情况情形”case 标签可以是类型为 char、byte、 short 或 int 的常量表达式。枚举常量。从 Java SE 7 开始 case 标签还可以是字符串字面量。例如String input ...; switch (input.toLowerCase()) { // toLowerCase用于将大写字符转换为小写 case yes: ... break; }当在 switch 语句中使用枚举常量时不必在每个标签中指明枚举名可以由 switch 的表达式值确定。例如Size sz ...; switch (sz) { case SMALL: // no need to use Size.SMALL ... break; ... }注意重复的 case 值是不允许的。3default表示“默认”即其他情况都不满足。default 后要紧跟冒号default 块和 case 块的先后顺序可以变动不会影响程序执行结果。通常default 块放在末尾也可以省略不写。4break表示“停止”即跳出当前结构。如果在 case 分支语句的末尾没有 break 语句有可能触发多个 case 分支。那么就会接着执行下一个 case 分支语句。这种情况相当危险常常会引发错误。为此我们在程序中从不使用 switch 语句。如果你喜欢 switch 语句编译代码时可以考虑加上 -Xlint:fallthrough 选项如下所示javac -Xlint:fallthrough Test.java这样一来如果某个分支最后缺少一个 break 语句编译器就会给出一个警告消息。switch 语句的执行过程如下表达式的值与每个 case 语句中的常量作比较。如果发现了一个与之相匹配的则执行该 case 语句后的代码。如果没有一个 case 常量与表达式的值相匹配则执行 default 语句。当然default 语句是可选的。如果没有相匹配的 case 语句也没有 default 语句则什么也不执行。图 1 switch语句执行流程图例 1在节目的抽奖环节里节目组会根据每位嘉宾的座位号来进行抽奖游戏根据不同的号码来决定奖项的大小。使用 switch 语句编写 Java 程序来完成奖项分配其实现代码如下。public static void main(String[] args) { System.out.println(请输入座位号码); Scanner sc new Scanner(System.in); int num sc.nextInt(); switch (num) { case 8: System.out.println(恭喜你获得了三等奖); break; case 88: System.out.println(恭喜你获得了二等奖); break; case 888: System.out.println(恭喜你获得了一等奖); break; default: System.out.println(谢谢参与); break; } }当用户输入的号码为 888 时获取的 num 值为 888则与第三个 case 后的值匹配执行它后面的语句输出“恭喜你获得了一等奖”然后执行 break 语句跳出整个 switch 结构。如果输入的号码与 case 中的值都不匹配则执行 default 后的语句。程序执行结果如下所示请输入座位号码 888 恭喜你获得了一等奖请输入座位号码 88 恭喜你获得了二等奖请输入座位号码 66 谢谢参与例 2编写一个 Java 程序根据当前的星期数字输出对应的汉字。在这里使用包含 break 的 switch 语句来判断当前的星期实现代码如下public static void main(String[] args) { String weekDate ; Calendar calendar Calendar.getInstance(); // 获取当前时间 int week calendar.get(Calendar.DAY_OF_WEEK) - 1; // 获取星期的第几日 switch (week) { case 0: weekDate 星期日; break; case 1: weekDate 星期一; break; case 2: weekDate 星期二; break; case 3: weekDate 星期三; break; case 4: weekDate 星期四; break; case 5: weekDate 星期五; break; case 6: weekDate 星期六; break; } System.out.println(今天是 weekDate); }本程序首先获取当前的星期值然后使用 switch 语句判断 week 的值0 表示星期日1 表示星期一2 表示星期二……以此类推6 表示星期六。只要 week 值与 case 值相符合则程序将执行该 case 中的语句并跳出 switch 语句输出结果。运行程序输出的结果如下今天是星期五嵌套 switch 语句可以将一个 switch 语句作为一个外部 switch 语句的语句序列的一部分这称为嵌套 switch 语句。因为一个 switch 语句定义了自己的块外部 switch 语句和内部 switch 语句的 case 常量不会产生冲突。例如下面的程序段是完全正确的public static void main(String[] args) { switch (count) { case 1: switch (target) { case 0: System.out.println(target is zero); break; case 1: System.out.println(target is one); break; } break; case 2: // ... } }本例中内部 switch 语句中的case 1语句与外部 switch 语句中的case 1语句不冲突。变量 count 仅与外层的 case 语句相比较。如果变量 count 为 1则变量 target 与内层的 case 语句相比较。学到这里我们可以发现以下几点switch 语句不同于 if 语句的是 switch 语句仅能测试相等的情况而 if 语句可计算任何类型的布尔表达式。也就是 switch 语句只能寻找 case 常量间某个值与表达式的值相匹配。在同一个 switch 语句中没有两个相同的 case 常量。当然外部 switch 语句中的 case 常量可以和内部 switch 语句中的 case 常量相同。switch 语句通常比一系列嵌套 if 语句更有效。最后一点尤其有趣因为它使我们知道 Java 编译器如何工作。当编译一个 switch 语句时Java 编译器将检查每个 case 常量并且创造一个“跳转表”这个表将用来在表达式值的基础上选择执行路径。因此如果你需要在一组值中做出选择switch 语句将比与之等效的 if-else 语句快得多。编译器可以这样做是因为它知道 case 常量都是同类型的所要做的只是将它与 switch 表达式相比较看是否相等。对于一系列的 if 表达式编译器就无此功能。if 语句和 switch 语句的区别if 和 switch 语句都表示条件语句可以从使用效率和实用性两方面加以区分。1. 从使用效率上区分从使用效率上区分在对同一个变量的不同值作条件判断时既可以使用 switch 语句也可以使用 if 语句。使用 switch 语句的效率更高一些尤其是判断的分支越多越明显。2. 从实用性上区分从语句的实用性角度区分switch 语句不如 if 条件语句if 语句是应用最广泛和最实用的语句。3. 何时使用 if 语句和 switch 语句在程序开发的过程中何时使用 if 语句和 switch 语句需要根据实际情况而定应尽量做到物尽其用。不能因为 switch 语句的效率高就一直使用也不能因为 if 语句常用就不用 switch 语句。需要根据实际情况具体问题具体分析使用最适合的条件语句。一般情况下对于判断条件较少的可以使用 if 条件语句但是在实现一些多条件的判断中最好使用 switch 语句。

相关推荐

网络安全技术服务方案
网络安全技术服务方案

2.6.1 系统运行维护方案 2.6.1.1 规划设计 2.6.1.2 安装部署 2.6.1.3 配置调整 2.6.1.4 故障处置 2.6.1.5 实时监控 2.6.1.6 日常巡检(机房) 2.6.1.7 资产梳理 2.6.2 系统安全维护方案 2.6.2.1 攻防演练 2.6.2.2 漏洞扫描 2.6.2.3 风险评估 2.6.2.4 渗透… · 2026/9/24 17:51:15

AIRS 屋顶分割数据集 |屋顶分割 语义分割 航空影像 建筑制图 AIRS 深度学习数据集9108期
AIRS 屋顶分割数据集 |屋顶分割 语义分割 航空影像 建筑制图 AIRS 深度学习数据集9108期

AIRS 屋顶分割数据集 |屋顶分割 语义分割 航空影像 建筑制图 AIRS 深度学习数据集9108期 数据集概述 本数据集专注于高分辨率航空影像中的屋顶语义分割,服务于自动化建筑制图、城市规划及地理信息更新。数据覆盖新西兰基督城全域,包含超过22万栋建筑的屋… · 2026/9/24 17:51:15

手搓了一个minimalSweAgent
手搓了一个minimalSweAgent

手搓了一个minimalSweAgent import subprocess from openai import OpenAI import json import logginglogging.basicConfig(levellogging.INFO,format"%(asctime)s %(levelname)s %(name)s: %(message)s",filename"loop.log" ) logger logging.getLogger… · 2026/9/24 17:51:08

SVG Path拖拽实时移动:transform与坐标换算实战详解
SVG Path拖拽实时移动:transform与坐标换算实战详解

这两年有个现象很常见&#xff1a;很多刚接触前端图形开发的同学&#xff0c;一看到 SVG 就头大&#xff0c;尤其是遇到 <path> 这种“一串天书”一样的 d 属性&#xff0c;根本不敢上手改。但他们又特别想做交互&#xff0c;比如让一个图形跟着鼠标拖动实时移动。我先… · 2026/9/24 18:20:30

开发代理不靠记:用direnv、whistle、Nginx管好环境变量与转发规则
开发代理不靠记:用direnv、whistle、Nginx管好环境变量与转发规则

先说明一下&#xff0c;这个标题里的“代理”&#xff0c;说的不是大家平时折腾的那种东西&#xff0c;而是开发流程里天天见的三类&#xff1a;环境变量里的 HTTP_PROXY、调试时用来转发请求的本地代理、还有 Nginx 这类反向代理入口。它们的共同点是——数量一多&#xff0c;… · 2026/9/24 18:20:30

Python神经网络实战:验证码识别从数据生成到模型部署全流程
Python神经网络实战:验证码识别从数据生成到模型部署全流程

简介&#xff1a;这是一套面向深度学习入门者与验证码识别实践者的端到端项目资源&#xff0c;基于PyTorch与ImageCaptcha构建CNN模型&#xff0c;无需字符切割、尺寸归一化或特征提取即可直接识别验证码&#xff0c;覆盖纯数字、数字加大小写字母等场景。包内共52个文件&#… · 2026/9/24 18:20:30

PyTorch CNN验证码识别实战:端到端训练与预测
PyTorch CNN验证码识别实战:端到端训练与预测

简介&#xff1a;这份资源面向希望入门深度学习与验证码识别方向的开发者、学生及算法爱好者&#xff0c;提供一套基于CNN的端到端验证码识别完整方案&#xff0c;无需进行字符切割、尺寸归一化或特征提取等繁琐预处理&#xff0c;即可直接训练与预测。资源包共52个文件&#x… · 2026/9/24 18:20:30

Flutter三方库鸿蒙适配实战:从soundcloud_explode_dart移植看差异层
Flutter三方库鸿蒙适配实战:从soundcloud_explode_dart移植看差异层

直接说结论&#xff1a;Flutter 三方库在鸿蒙上的适配&#xff0c;大部分工作不是改业务代码&#xff0c;而是搞清楚“鸿蒙跟 Android/iOS 的差异层在哪”。这次我把soundcloud_explode_dart移植到鸿蒙上跑通&#xff0c;核心要解决的问题有三个&#xff1a;SoundCloud 媒体内容… · 2026/9/24 18:20:30

Addressables构建全攻略:分组策略、热更新与CI/CD自动化实践
Addressables构建全攻略:分组策略、热更新与CI/CD自动化实践

1. 构建前想清楚&#xff1a;分组策略决定Bundle形态很多团队用Addressables踩的第一个坑&#xff0c;就是以为装好包、把资源拖进Group就算接入完成了。等第一次正式构建完&#xff0c;打开日志一看&#xff0c;打出来的Bundle数量、大小、依赖关系完全不是预期&#xff0c;再… · 2026/9/24 18:20:24

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介&#xff1a;这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源&#xff0c;围绕YOLOv8实现渔船作业监控系统&#xff0c;可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件&#xff0c;约24.21MB&#xff0c;以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介&#xff1a;面向时间序列数据建模的一维卷积神经网络完整实现&#xff0c;适合深度学习入门者及需要快速验证时序模型的研究者&#xff0c;能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小&#xff0c;只有3KB&#xff0c;内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L&#xff0c;而是舌尖上的L最近在几个方言群和语音教学社群里&#xff0c;反复看到有人发一句&#xff1a;“也说字母L&#xff1a;柔软的长舌”。初看以为是英语发音课笔记&#xff0c;点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码