Java 关键字 — switch

Java 中的 switch 语句是一种多分支选择结构,它允许基于不同的情况执行不同的代码块。通常结合break, default, case 等关键字一起使用。

switch (expression) {
    case value1:
        // 代码块
        break; // 可选
    case value2:
        // 代码块
        break; // 可选
    // 可以有任意数量的case语句
    default: // 可选
        // 默认情况下的代码块
}

expression:这是一个必须的表达式,它的结果被用来与 case 语句中的值进行比较。这个表达式可以是 byte、short、char、int 类型,枚举(Java 5 开始支持),或者是 String 类型(Java 7 开始支持),
任意类型(Java 12).

case value:这是与 expression 结果进行匹配的值。如果匹配成功,紧随其后的代码块将被执行。
value 必须为一个常量表达式。  JAVA 12 开始支持类型推断。
JAVA 21 开始支持 when.

break:这是一个可选关键字,用来终止 switch 语句的执行。如果没有 break,程序将会继续执行下一个 case 中的代码,直到遇到 break 或者 switch 语句的结尾。

default:这也是一个可选部分,当没有任何 case 与 expression 的值匹配时,将执行 default 部分的代码。
示例:
final static class User{public String name;}

	private static final char m = 'm';
	private static final User user = new User();
	
	static void switchSen(Object v) {
		Character c = 1;
		User u = new User();
		switch(v) {
			case Integer i: System.out.println(i);
				break;
			//case c: System.out.println(1);
			//case 1: System.out.println(1);
			case User us: System.out.println(us);
			default: 
				System.out.println("default");
		}
		
		
		switch(c) {
			case 2: System.out.println(2);
			case m: System.out.println(m);
			default: 
				System.out.println("default");
		}
		
		switch(u) {
			case User i when u.name.equals("abc"): System.out.println(i);
	//		case user: System.out.println(2);
			default: 
				System.out.println("default");
		}
		
	}

switch 表达式
在 Java 12 及以后的版本中,switch 可以用作表达式,这意味着它可以返回一个值。switch 表达式使用 -> 来代替case 后的 :. 另外每个case 不需要使用break , 只返回因为表达式是有返回值的,因此其中的case 必须涵盖传入表达式的所有值。

switch (expression) {
    case value1 -> {
        // 代码块
        yield value; // 可选
    }
    case value2 -> value:
    // 可以有任意数量的case语句
    default -> default value // 可选
        // 默认情况下的代码块
}

case value:这是与 expression 结果进行匹配的值。如果匹配成功,紧随其后的代码块将被执行。
value 必须为一个常量表达式。 JAVA 12 开始支持类型推断。
JAVA 21 开始支持 when.

示例:

static String switchWhen(Object v) {
		//int when = 1; 
		//int yield = 3;//任然可以作为变量

		return switch(v) {
			case Integer i ->  i.toString();
			case String s when s.equalsIgnoreCase("yes") ->{
				yield s.toUpperCase();
			}
			case String s when s.equalsIgnoreCase("yeap") -> "yep";
			default ->  "EMPTY";
		};
	}
	
	static String switchNull(Object v) {
		return switch(v) {
			case Integer i ->  i.toString();
			case String s when s.equalsIgnoreCase("yes") ->{
				yield s.toUpperCase();
			}
			case String s -> "NO";
			case null,default ->  "EMPTY";
		};
	}
	
	static String switchString(CharSequence v) {
		return switch(v) {
			case String s -> "String";
			case CharSequence s -> "CS";
//			case String s when s.equalsIgnoreCase("yes") ->{
//				yield s.toUpperCase();
//			}
//			default ->  "EMPTY";  //前面两个case 已处理所有情况
		};
	}


为什么使用Switch
   从使用语法可知,switch 能实现的功能,if else 也是能实现的,但使用switch 有以下几大优势:


可读性: 当你需要基于同一个变量的不同值来执行不同的代码块时,switch语句比多个if-else语句更加清晰和易读。

效率: 对于包含许多case的情况,switch语句通常比if-else语句更高效,因为switch语句可以转化为跳转表,这意味着不需要按顺序检查每个条件。

可维护性: 当需要修改或者增加新的条件分支时,switch语句的结构使得这些变更更加集中和简单。

Java 关键字

Java关键字是指在Java编程语言中具有特定含义的保留单词。这些关键字代表了Java语言的基本构建块,它们用于定义数据类型、流程控制语句、访问权限等。由于这些单词被Java语言赋予了特殊的意义,不能用作标识符,例如类名、方法名或变量名等。 随着Java 发展及保证向后兼容性需求,新版本出现了可用于做标识符的局部关键字, 他们只在特定表达式或语法中做为关键字识别, 其他地方仍可作为标识符使用。

Java 总共包含53个关键字,详情如下表:

关键字类型关键字类型
abstract类、方法和变量修饰符native类、方法和变量修饰符
assert错误处理new变量引用
boolean数据类型package包定义
break程序控制结构private访问控制,私有
byte数据类型protected访问控制,保护
case程序控制结构public访问控制,公开
catch错误处理return程序控制结构
char数据类型short数据类型
class类、方法和变量修饰符static类、方法和变量修饰符
continue程序控制结构strictfp类、方法和变量修饰符
default程序控制结构super变量引用
do程序控制结构switch程序控制结构
double数据类型synchronized类、方法和变量修饰符
else程序控制结构this变量引用
enum类、方法和变量修饰符throw错误处理
extends类、方法和变量修饰符throws错误处理
final类、方法和变量修饰符transient类、方法和变量修饰符
finally错误处理try错误处理
float数据类型void变量引用
for程序控制结构volatile类、方法和变量修饰符
if程序控制结构while程序控制结构
implements类、方法和变量修饰符goto保留关键字
import包引入const保留关键字
int数据类型null特殊常量
interface类、方法和变量修饰符false特殊常量
instanceof程序控制结构true特殊常量
long数据类型

局部关键字:

关键字说明引入版本
var用于局部变量类型推断10
record 用于声明记录类12
sealed用于密封类和接口, 定义密封类或接口17
non-sealed用于密封类和接口,定义非密封类或接口17
permits用于密封类和接口,定义密封类或接口的可实现类范围17
yieldswitch 表达式值返回12
whenswitch 增强,case 扩展21

京ICP备12026520号-3