java switch语句机制

时间:2016-05-24 16:19:18

标签: java switch-statement

在下面的代码中,当我评论休息时,当我写一个案例(说“开始”)时,它将打印下面输出的所有案例,意味着所有三行都被打印,当我写“停止”它打印两个输出“Mechine停止”和“没有给出命令”,为什么我需要在编译器搜索案例时给出break语句,如果匹配则打印相关输出。

    import java.util.Scanner;
    public class App{
    public static void main(String args[]){
    Scanner input = new Scanner(System.in);
    String text = input.nextLine();
    switch(text){
        case "start":
        System.out.println("Mechine Started");
        break;
        case "stop":
        System.out.println("Mechine stopped");
        break;
        default:
        System.out.println("No command given");


            }
        }
    }

3 个答案:

答案 0 :(得分:6)

  

为什么我需要在编译器搜索时给出break语句   例如,如果匹配则打印相关输出。

因为它是如何定义的。除非您明确break

,否则您的程序将直接其余的案例条款

请参阅JLS section 14.11并注意:

  

如果其中一个case常量等于表达式的值,   然后我们说案例匹配,以及之后的所有陈述   在开关块中匹配的案例标签(如果有的话)被执行   序列

它类似于C中的开关行为,注意。来自Wikipedia

  

从C派生的语言,更常见的是受到影响的语言   Fortran计算了GOTO,而不是特征性的通过控制   移动到匹配的案例,然后继续执行("下降   通过")与下一个案例相关的陈述   源文本

答案 1 :(得分:1)

Fall through

  

另一个兴趣点是break语句。每个break语句都会终止封闭的switch语句。控制流继续切换块后面的第一个语句。 break语句是必要的,因为如果没有它们,switch块中的语句就会失败:匹配的case标签之后的所有语句都按顺序执行,而不管后续case标签的表达式,直到遇到break语句为止。

答案 2 :(得分:0)

在switch语句中不使用 break 直通逻辑

switch语句没有说“你需要包含break”。

最佳做法是,在使用此逻辑时,您应添加评论 // fall-through