在处理多个选项时,使用 if/else 结构显得有些笨拙。Java 有一个 switch 语句。java
switch 语句将从与选项值相匹配的 case 标签开始执行,直到遇到 break 语句,或者执行到 switch 语句的结束处为止。若是没有相匹配的 case 标签,而有 default 子句,就执行这个子句。ide
下面是一个 switch 的例子:工具
Scanner in = new Scanner(System.in); System.out.println("请输入 一、二、三、4 !"); int choice = in.nextInt(); switch(choice) { case 1: System.out.println("输入的值为: " + choice); break; case 2: System.out.println("输入的值为: " + choice); break; case 3: System.out.println("输入的值为: " + choice); break; case 4: System.out.println("输入的值为: " + choice); break; default: System.out.println("bad input"); break; }
有可能触发多个 case 分支。若是在 case 分支语句的末尾没有 break 语句,那么就会接着执行下一个 case 分支语句。这种状况至关危险,经常会引起错误。为此,咱们在程序中从不使用 switch 语句。
若是你比咱们更喜欢 switch 语句,编译代码时能够考虑加上 -Xlint:fallthrough 选项,以下所示:
javac -Xlint:fallthrough Test.java
这样以来,若是某个分支最后缺乏一个 break 语句,编译器就会给出一个警告消息。
若是你肯定正是想使用这种“直通式”(fallthrough)行为,能够为其外围方法加上一个标注 @SuppressWarnings("fallthrough")。这样就不会对这个方法生成警告了。(注解是为编译器或处理 Java 源文件或类文件的工具提供信息的一种机制。)code
case 标签能够是:blog
当在 switch 语句中使用枚举常量时,没必要在每一个标签中指明枚举名,能够由 switch 的表达式值推导得出。例如:
enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE};
字符串
Size sz = Size.SMALL; switch (sz) { case SMALL: // 不须要使用 Size.SMALL ... break; ... }