Switch语句

!!! note 目录

Switch 语句


一、case 语句可以合并


case 后面只能是字面量值这样的值,不能使用变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.Scanner;

public class SwitchTest01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Integer month = sc.nextInt();
String str;
switch(month) {
case 3: case 4: case 5:
str="春天";
break;
case 6 : case 7: case 8:
str="夏天";
break;
case 9: case 10: case 11:
str="秋天";
break;
case 12: case 1: case 2:
str="冬天";
break;
default: str="请输入正确月份";
}
System.out.println(str);
}
}

二、Java12 中 switch 的新特性


增强的 switch 语句是 Java 12 中引入的一项语言特性,它在 Java 14 中得到了进一步改进。这个特性的目的是提供更简洁、灵活和易读的 switch 语法。

传统的 switch 语句在处理多个条件分支时可能存在一些问题,例如需要使用 break 语句显式地结束每个分支,容易出现忘记添加 break 而导致多个分支执行的情况。

增强的 switch 语句解决了这些问题,并引入了一些新的语法特性。

增强的 switch 语句的特点如下:

  • 使用表达式作为分支条件:增强的 switch 语句允许在每个 case 分支中使用表达式,而不仅限于常量。这使得代码更加灵活,可以更方便地处理各种条件。
  • 无需显式 break:在传统的 switch 语句中,每个 case 分支必须以 break 语句结束,否则会继续执行下一个分支。而增强的 switch 语句不需要显式地使用 break,每个分支会自动结束,不会继续执行下一个分支。
  • 使用箭头(->):在增强的 switch 语句中,分支的语法使用箭头(->)来连接分支的条件和执行语句,这使得代码更加简洁和易读。
  • 引入 yield 关键字:在 Java 14 中,增强的 switch 语句引入了 yield 关键字,用于在分支中返回值。这使得 switch 语句可以像表达式一样返回值,增强了其功能性。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class YieldTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份");
int year = sc.nextInt();
System.out.println("请输入月份");
int month = sc.nextInt();
int days = switch (month) {
case 1,3,5,7,8,10,12 ->31;
case 4,6,9,11->30;
case 2->{
if(year%4==0&&year%100!=0&&year%400==0)yield 29;
else yield 28;
}
default -> {
yield -1;
}
};
System.out.println("这个月的天数:"+days);
}
}

1
2
3
4
5
6
7
8
9
10
class Switch01{
public static void main(String[] args) {
switch(expression){
case 1-> System.out.println("switch");
case 2 -> System.out.println("Change in");
case 3 -> System.out.println("Java12");
default -> System.out.println("default");
}
}
}