一、switch case语句的基本用法
Java中的switch case语句用于在多个可能的选项中进行选择,其基本的结构如下:
switch (expression) { case value1: // statements break; case value2: // statements break; ... default: // statements break; }
switch后面的(expression)是需要进行匹配的值,而value1,value2是可能的选项值,如果匹配上了选项值,那么就执行相应的语句,如果没有匹配上任何一个选项就会执行default后面的语句。break语句用于退出switch语句,确保只执行匹配选项后的语句。
下面是一个例子,演示使用switch case语句得到当前月份的名称:
import java.util.Scanner; public class MonthNameDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入一个月份的数字:"); int monthNum = sc.nextInt(); switch (monthNum) { case 1: System.out.println("一月"); break; case 2: System.out.println("二月"); break; case 3: System.out.println("三月"); break; case 4: System.out.println("四月"); break; case 5: System.out.println("五月"); break; case 6: System.out.println("六月"); break; case 7: System.out.println("七月"); break; case 8: System.out.println("八月"); break; case 9: System.out.println("九月"); break; case 10: System.out.println("十月"); break; case 11: System.out.println("十一月"); break; case 12: System.out.println("十二月"); break; default: System.out.println("输入的月份无效!"); break; } } }
上述代码中,用户需要输入一个1到12之间的数字,然后根据输入的数字使用switch case语句得到相应月份的名称。如果输入的数字不在1到12之间,就输出“输入的月份无效!”。
二、switch case语句的常见应用
1. 字符串匹配
Java SE 7以上版本支持在switch语句中使用字符串,实现字符串的匹配。例如:
public class StringSwitchDemo { public static void main(String[] args) { String fruit = "orange"; int price = 0; switch (fruit) { case "apple": price = 10; break; case "pear": price = 8; break; case "orange": price = 6; break; default: price = 0; break; } System.out.println(fruit+"的价格是:"+price); } }
以上代码演示了通过switch case语句,得到不同种类水果的价格。注意,fruit是字符串类型变量。
2. 枚举类型匹配
当我们需要处理的数据都是已知的一组值时,枚举类型会很有用。枚举类型提供了更清晰的语义,使代码更易读,并且可以有效地使用switch语句处理。
下面是一个演示怎样使用switch语句处理枚举类型(Grade)的例子:
public class GradeEnumDemo { public static void main(String[] args) { Grade grade = Grade.GOOD; switch (grade) { case EXCELLENT: System.out.println("A优秀"); break; case GOOD: System.out.println("B良好"); break; case FAIR: System.out.println("C及格"); break; case POOR: System.out.println("D不及格"); break; default: System.out.println("未评定"); break; } } } enum Grade { EXCELLENT, GOOD, FAIR, POOR; }
上述代码中,枚举类型Grade包括四个值:EXCELLENT, GOOD, FAIR, POOR。根据不同的枚举值,使用switch case语句输出相应的等级。Grade是通过enum定义实现的枚举类型。
三、switch case语句的本质
Java SE规范中定义,switch语句由多个case分支和一个可选的default分支组成。case分支以及default分支本质上都是一个标签(Label)。在Java中,标签可以是任何字符或者字符串,并且以冒号结尾。
在程序执行过程中,当遇到一个标签时,就会执行标签后面的语句。换句话说,switch语句的本质是一个带标签的goto语句。标签放在每个case分支和default分支前面,而跳转语句(类似于goto)由Java编译器自己负责编译产生,这就使得我们的程序看起来更加的优雅,更易于理解。
四、switch case语句的缺点和使用限制
1. switch语句不支持浮点型和布尔型数据类型。
2. switch语句不能使用范围,必须使用固定值,即case中只能使用常量或者final变量。
3. switch语句的缺省分支应该放在最后,而不是中间或者最前面。
4. 如果在程序中需要嵌套很多的switch语句时,容易造成代码难以读懂也容易出错。
5. Java SE 7以上版本支持在switch语句中使用字符串,但是这种方法不如使用if-else语句的效率高。
总结
本文介绍了Java中switch case语句的基础用法和常见应用,比如字符串匹配和枚举类型匹配。同时,也分析了switch case语句的本质以及使用时需要注意的限制。在Java的开发过程中,判断语句是非常必要的,选择switch case语句或者if-else语句要根据实际情况判断,编写优质可维护的代码。