多标签 case
将多个标签组合在一起
多标签 case 是 CoddyKit 上的免费 Java Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 4 节课。
分组标签
很多时候,多个值应该触发相同的操作。现代 switch 允许您在一个分支中列出多个标签,并用逗号分隔,让它们共享同一个分支。
逗号分隔的标签
请在 -> 前依次写出各个值,并用逗号分隔。只要其中任何一个值匹配,该分支就会执行。
public class Main {
public static void main(String[] args) {
int day = 7;
switch (day) {
case 1, 2, 3, 4, 5 -> System.out.println("Weekday");
case 6, 7 -> System.out.println("Weekend");
}
}
}检测元音
一种经典用法是将所有元音归入同一个分支,而不是编写五个单独的分支。
public class Main {
public static void main(String[] args) {
char c = 'o';
switch (c) {
case 'a', 'e', 'i', 'o', 'u' -> System.out.println("Vowel");
default -> System.out.println("Consonant");
}
}
}表达式中的多标签
多标签分支同样适用于 switch 表达式,列出的任意标签都会返回相同的值。
public class Main {
public static void main(String[] args) {
int month = 7;
String season = switch (month) {
case 12, 1, 2 -> "Winter";
case 3, 4, 5 -> "Spring";
case 6, 7, 8 -> "Summer";
default -> "Autumn";
};
System.out.println(season);
}
}分组字符串标签
字符串值也可以分组。在这里,多种命令写法会映射到同一个操作。
public class Main {
public static void main(String[] args) {
String cmd = "quit";
switch (cmd) {
case "quit", "exit", "q" -> System.out.println("Closing");
case "help", "h" -> System.out.println("Showing help");
default -> System.out.println("Unknown command");
}
}
}分组枚举标签
枚举常量也可以共享一个分支,从而使类别逻辑更加简洁。
public class Main {
enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
public static void main(String[] args) {
Day d = Day.SAT;
String kind = switch (d) {
case SAT, SUN -> "Rest";
default -> "Work";
};
System.out.println(kind);
}
}标签不能重复
同一个标签在整个 switch 中只能出现一次。在两个分支中列出相同的值会导致编译错误,因为编译器无法决定应该执行哪个分支。
public class Main {
public static void main(String[] args) {
int n = 2;
switch (n) {
case 1, 2 -> System.out.println("Low");
case 3, 4 -> System.out.println("High");
default -> System.out.println("Other");
}
}
}与旧式分支贯穿的比较
在旧式冒号写法中,分组需要将空的贯穿分支堆叠在一个共享的代码主体上方。逗号语法清晰得多,也避免了意外的分支贯穿。
public class Main {
public static void main(String[] args) {
int code = 3;
switch (code) {
case 1, 3, 5, 7, 9 -> System.out.println("Odd");
case 0, 2, 4, 6, 8 -> System.out.println("Even");
}
}
}与代码块结合使用
分组分支也可以使用代码块主体。任何匹配的标签都会执行整个代码块。
public class Main {
public static void main(String[] args) {
char grade = 'B';
switch (grade) {
case 'A', 'B' -> {
System.out.println("Pass");
System.out.println("Well done");
}
default -> System.out.println("Try again");
}
}
}与 yield 结合使用
当共享分支需要进行计算时,分组标签可以与 yield 结合使用。
public class Main {
public static void main(String[] args) {
int n = 4;
int points = switch (n) {
case 1, 2, 3 -> 10;
case 4, 5, 6 -> {
int bonus = n * 2;
yield 20 + bonus;
}
default -> 0;
};
System.out.println(points);
}
}可读性提升
多标签分支可以将冗长的重复分支列表缩减为几个清晰的分组,让代码意图一目了然。
public class Main {
public static void main(String[] args) {
int http = 204;
String group = switch (http / 100) {
case 1, 2, 3 -> "OK-ish";
case 4, 5 -> "Error";
default -> "Unknown";
};
System.out.println(group);
}
}快速检查
在现代 Java 中,如何让多个值执行同一个 switch 分支?
回顾
您学习了多标签分支:
- 在
->前以逗号分隔列出各个值 - 适用于 int、字符、String 和枚举
- 不像旧式写法那样会发生意外的分支贯穿
- 每个标签只能出现一次
- 需要时可以与代码块和
yield结合使用
常见问题解答
「多标签 case」课时是免费的吗?
是的 — 「多标签 case」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 4 节课。
「多标签 case」这节课中我会学到什么?
将多个标签组合在一起 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Java Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「多标签 case」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Java Academy 课中编写并运行代码吗?
能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。