咦咦咦,各位小可爱,我是你们的好伙伴 bug菌,今天又来给大家手把手教学Java SE系列知识点啦,赶紧出来哇,别躲起来啊,听我讲干货记得点点赞,赞多了我就更有动力讲得更欢哦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
前言
控制流是编程中的重要概念之一,其中条件语句是控制流的重要部分之一。在Java编程中,switch语句是一种常见的条件语句,用于执行不同的代码块,具体取决于表达式的结果。本篇文章将介绍switch语句的语法、用法、示例和应用场景。
摘要
本篇文章将围绕Java中的switch语句展开讨论。文章首先介绍了switch语句的基本语法,然后探讨了如何使用switch语句来处理不同的数据类型,包括整数、字符、字符串和枚举类型。然后,文章介绍了switch语句中的break和default关键字,以及如何使用它们来控制代码的执行。最后,文章提供了一些示例和应用场景,让读者对switch语句的使用有更深刻的理解。
正文
switch语句的基本语法
switch语句是一种多分支条件语句,用于根据不同的条件执行不同的代码块。其基本语法如下:
switch (表达式) {
case 常量1:
// 执行代码块1
break;
case 常量2:
// 执行代码块2
break;
// 其他case语句
default:
// 执行默认代码块
}
其中,表达式可以是任何基本数据类型,如整数、字符、字符串等,也可以是枚举类型。case语句用于比较表达式的值和常量的值是否相等,如果相等就执行相应的代码块。如果表达式的值与所有的常量都不匹配,则执行默认代码块。
需要注意的是,每个case语句都必须以break结束,否则会执行到下一个case语句。如果没有break语句,程序会从第一个匹配的case语句开始执行,并直到遇到break或整个switch语句结束。
处理整数类型
使用switch语句处理整数类型非常方便。下面是一个示例:
int day = 2;
switch (day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
// 其他case语句
default:
System.out.println("未知");
}
在上面的示例中,我们定义了一个整数day,并使用switch语句根据day的值执行不同的代码块。如果day的值为1,就输出“星期一”,如果day的值为2,就输出“星期二”,其他情况下输出“未知”。
代码分析:
根据给定的代码,首先定义了一个整型变量day并赋值为2。然后使用switch语句根据day的值进行判断。
在switch语句中,当day的值为1时,会执行第一个case的语句,即输出"星期一",然后通过break语句跳出switch语句。
当day的值为2时,会执行第二个case的语句,即输出"星期二",然后通过break语句跳出switch语句。
如果day的值不满足以上两个case的条件,就会执行default语句,即输出"未知"。
根据给定的代码,由于day的值为2,所以会输出"星期二"。
处理字符类型
除了整数类型,switch语句还可以处理字符类型。下面是一个示例:
char grade = 'B';
switch (grade) {
case 'A':
System.out.println("优秀");
break;
case 'B':
System.out.println("良好");
break;
// 其他case语句
default:
System.out.println("未知");
}
在上面的示例中,我们定义了一个字符类型的变量grade,并使用switch语句根据grade的值执行不同的代码块。如果grade的值为'A',就输出“优秀”,如果grade的值为'B',就输出“良好”,其他情况下输出“未知”。
代码分析:
根据以上代码分析,首先定义了一个 char 类型的变量 grade,并将其赋值为 'B'。然后使用 switch 语句对 grade 进行判断。
根据 switch 语法,会根据 grade 的值匹配到相应的 case 分支。在这里,grade 的值为 'B',因此会执行 case 'B' 下的代码块。这里的代码块是输出字符串 "良好"。
由于没有使用 break 语句,代码会继续执行后面的 case 分支。但是在这里没有其他 case 分支,所以没有更多的代码会被执行。
因此,以上代码会输出 "良好"。
处理字符串类型
在Java 7以前,switch语句只能处理整数和字符类型。但是,从Java 7开始,switch语句也可以处理字符串类型。下面是一个示例:
String color = "red";
switch (color) {
case "red":
System.out.println("红色");
break;
case "green":
System.out.println("绿色");
break;
// 其他case语句
default:
System.out.println("未知");
}
在上面的示例中,我们定义了一个字符串类型的变量color,并使用switch语句根据color的值执行不同的代码块。如果color的值为“red”,就输出“红色”,如果color的值为“green”,就输出“绿色”,其他情况下输出“未知”。
需要注意的是,使用字符串类型作为switch语句的表达式时,每个case语句必须使用字符串字面量。
代码分析:
根据上述代码,我们有一个字符串变量color,它用来存储颜色的值。我们使用switch语句来判断color的值,并根据不同的情况进行相应的操作。
首先,我们检查color的值是否为"red"。如果是,我们将输出红色,并使用break语句来结束switch语句。
如果color的值不是"red",我们继续检查它是否为"green"。如果是,我们将输出绿色,并使用break语句来结束switch语句。
如果color的值既不是"red"也不是"green",我们将执行default语句块,输出"未知"。
总结:根据color的值的不同,我们将输出相应的颜色名称。如果color的值不是"red"也不是"green",我们将输出"未知"。
处理枚举类型
与字符串类型一样,从Java 7开始,switch语句也可以处理枚举类型。下面是一个示例:
enum Status {
NEW, RUNNING, FINISHED
}
...
Status status = Status.NEW;
switch (status) {
case NEW:
System.out.println("新的");
break;
case RUNNING:
System.out.println("运行中");
break;
case FINISHED:
System.out.println("已完成");
break;
}
在上面的示例中,我们定义了一个枚举类型Status,并使用switch语句根据status的值执行不同的代码块。如果status的值为NEW,就输出“新的”,如果status的值为RUNNING,就输出“运行中”,如果status的值为FINISHED,就输出“已完成”。
代码分析:
根据以上代码,我们定义了一个枚举类型Status
,包含了NEW
、RUNNING
和FINISHED
三种状态。
然后我们声明一个Status
类型的变量status
,并将其赋值为Status.NEW
。
接下来我们使用switch
语句根据status
的值进行判断。如果status
的值是Status.NEW
,则会执行对应的代码块,输出"新的";如果status
的值是Status.RUNNING
,则会执行对应的代码块,输出"运行中";如果status
的值是Status.FINISHED
,则会执行对应的代码块,输出"已完成"。
在这个例子中,status
的值是Status.NEW
,因此输出结果为"新的"。
break和default关键字
在switch语句中,break和default是两个重要的关键字。break用于中断switch语句的执行,default用于定义默认的代码块。下面是一个示例:
int score = 90;
switch (score) {
case 80:
System.out.println("良好");
break;
case 90:
case 100:
System.out.println("优秀");
break;
default:
System.out.println("未知");
}
在上面的示例中,我们定义了一个整数类型的变量score,并使用switch语句根据score的值执行不同的代码块。如果score的值为80,就输出“良好”,如果score的值为90或100,就输出“优秀”,其他情况下输出“未知”。
需要注意的是,case语句可以合并,如上面的示例中,case 90和case 100合并成了一个语句块,并使用了相同的代码。
代码分析:
根据上述代码分析,变量score的值为90。代码使用了switch语句来根据score的值进行判断。
首先,代码执行switch(score)语句,根据score的值进入对应的case分支。
在case 80:的分支中,score的值为90,不满足条件,不执行该分支的代码。
在case 90:和case 100:的分支中,score的值为90,满足条件,执行对应分支的代码。在这个例子中,两个分支的代码是一样的,所以会输出"优秀"。
最后一个分支default是在没有匹配到任何case的情况下执行的。但在这个例子中,有匹配到的分支,所以不会执行default分支的代码。
因此,根据上述代码分析,输出将会是"优秀"。
示例和应用场景
在实际编程中,switch语句具有广泛的应用场景,如下面所示:
- 处理菜单、选项和命令行参数;
- 根据状态、错误码、事件类型等执行不同的操作;
- 根据日期、时间、季节、天气等执行不同的操作;
- 根据对象类型、方法名、属性名等执行不同的操作。
下面是一个示例,展示如何使用switch语句根据日期的值输出不同的信息:
import java.util.Scanner;
public class SwitchExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入日期:");
int day = scanner.nextInt();
switch (day) {
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("周末");
break;
default:
System.out.println("无效日期");
}
}
}
在上面的示例中,我们根据用户输入的日期输出不同的信息。如果日期是1到5,就输出“工作日”,如果日期是6或7,就输出“周末”,其他情况下输出“无效日期”。
代码分析:
这段代码是一个简单的Java程序,它通过使用 switch
语句来根据用户输入的日期判断是工作日还是周末。
首先,程序创建了一个 Scanner
对象来接收用户的输入。然后,它要求用户输入一个日期。接下来,程序使用 switch
语句来判断用户输入的日期是哪一天。
switch
语句根据 day
变量的值进行判断。如果 day
的值是 1、2、3、4 或 5,则输出 "工作日"。如果 day
的值是 6 或 7,则输出 "周末"。如果 day
的值不是上述任何一个值,则输出 "无效日期"。
最后,程序结束运行。
注意:此代码并没有进行错误处理,即用户输入非整数值时会抛出 InputMismatchException
异常。
总结
switch是Java中的一种条件语句,它根据某一个变量或表达式的值,跳转到匹配的case语句执行。以下是switch条件语句的总结:
switch语句中的表达式只能是整型(byte, short, int或char)、枚举类型或字符串类型。
switch语句中的case语句必须是常量表达式,即只能是字面量、final变量或enum常量。
switch语句中的case语句的执行顺序是从匹配到的第一个case开始,直到switch语句结束或遇到break语句为止。
switch语句中可以有多个case语句,但每个case语句的值必须唯一。
switch语句中可以有一个default语句,表示当没有匹配的case时执行的语句。
switch语句中的break语句用于跳出switch结构,如果没有break语句,则会继续执行下一个case语句。
switch语句中的语句块可以是任意语句,包括复合语句和空语句。
switch语句可以嵌套使用,在内部的switch语句中可以有外部switch语句中的case语句。
总之,switch语句是一种方便和简洁的条件控制语句,可以根据变量或表达式的值来执行不同的语句块。在实际开发中,适当地使用switch语句可以提高代码的可读性和效率。
... ...
好啦,这期的内容就基本接近尾声啦,若你想学习更多,你可以看看专栏的导读篇《「滚雪球学Java」教程导航帖》,本专栏致力打造最硬核 Java 零基础系列学习内容,🚀打造全网精品硬核专栏,带你直线超车;欢迎大家订阅持续学习。功不唐捐,久久为功!
「赠人玫瑰,手留余香」,咱们下期拜拜~~
附录源码
如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。
☀️建议/推荐你
无论你是计算机专业的学生,还是对编程感兴趣的跨专业小白,都建议直接入手「滚雪球学Java」专栏;该专栏不仅免费,bug菌还郑重承诺,只要你学习此专栏,均能入门并理解Java SE,以全网最快速掌握Java语言,每章节源码均同步「Gitee」,你真值得拥有;学习就像滚雪球一样,越滚越大,带你指数级提升。
码字不易,如果这篇文章对你有所帮助,帮忙给bugj菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。
同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!