秦疆的Java课程笔记:37 流程控制 switch选择结构

发布时间 2023-11-23 16:15:33作者: Acolyte_9527
  • 多选择结构还有一个实现方式就是switch case语句。
  • switch case语句判断一个变量与一系列值中某个值是否相等,每个值为一个分支。
  • if判断区间,switch匹配一个具体的值。
  • 语法:
switch(expression){
	case value :
		//语句
		break;//可选
	case value :
		//语句
		break;//可选
	//可以有任意数量的case语句
	default : //可选
		//语句
}
  • switch语句中的变量类型可以是:
    • byte,short,int,char
    • 从Java SE 7开始,switch支持字符串String类型
    • 同时case标签必须为字符串常量或字面量。
import java.util.Scanner;
public class SwitchDome1 {  
    public static void main(String[] args) {  
        Scanner scanner = new Scanner(System.in);  
        System.out.println("请输入等级:");  
        String grade = scanner.nextLine();  
        switch (grade){  
            case "A" :  
                System.out.println("优");  
                break;  
            case "B" :  
                System.out.println("良");  
                break;  
            case "C" :  
                System.out.println("及格");  
                break;  
            case "D" :  
                System.out.println("再接再厉");  
                break;  
            case "E" :  
                System.out.println("挂科");  
                break;  
            default :  
                System.out.println("未知等级");  
        }
        scanner.close();  
    }  
}
====演示====
请输入等级:
C
及格
  • case穿透:上面的代码去掉几个break
import java.util.Scanner;
public class SwitchDome2 {  
    public static void main(String[] args) {  
        Scanner scanner = new Scanner(System.in);  
        System.out.println("请输入等级:");  
        String grade = scanner.nextLine();  
        switch (grade){  
            case "A" :  
                System.out.println("优");  
                break;  
            case "B" :  //删去了break
                System.out.println("良");  
            case "C" :  //删去了break
                System.out.println("及格");  
            case "D" :  
                System.out.println("再接再厉");  
                break;  
            case "E" :  
                System.out.println("挂科");  
                break;  
            default :  
                System.out.println("未知等级");  
        }
        scanner.close();  
    }  
}
====演示====
B
良    //这里输入B返回“良”之后,没有break语句,继续输出。
及格
再接再厉//直到“再接再厉”才有break语句。
  • 为了解释JDK7之后是如何支持String类型的,秦疆老师用IDEA打开了class文件,也就是字节码文件,他称这一过程叫反编译。接着展示了String类型是如果通过哈希值,而被switch语句支持。(虽然完全不明所以)
  • 在JDK21,通过秦疆老师的方法打开class文件,显示的代码与原本无异,看不到“哈希”字样。
  • 在菜单栏View选项下有一个Show Bytecode工具,点击后,也会出现字节码。但是和秦疆老师展示的完全不一样了,能看到“哈希”的字样,其他的就看不懂了。