繁体   English   中英

交换机是否在不停止的情况下执行所有情况?

[英]Is a switch executing all the cases without stopping?

我在使用Java 8v60。 我试图在catch块中嵌入一个关于异常组的开关。 显然,案件得到了认可,但一旦他们进入交换机,他们就会继续经历所有可能的情况。 这是一个Java错误吗?

它看起来像这样:

try {
    ... 
} catch (DateTimeParseException exc) {
    ...
} catch (myException exc) {
switch (exc.getEvent()) {
    case EVENT_ONE :
//once EVENT_ONE gets here;
    case EVENT_TWO : case EVENT_THREE :
//it keeps going everywhere;
    case EVENT_FOUR :
//and so on;
    default :
//and here of course too.
//but if it's not one of the above, it just appears here only
}
...

很奇怪,不是吗。 任何想法?

不,这不是一个错误。 您没有正确实现切换。 它已经失败了。 你需要在每个案件后break

例如:

    switch (exc.getEvent()) {
    case EVENT_ONE :
    //once EVENT_ONE gets here;
    break;
    case EVENT_TWO : case EVENT_THREE :
   //it keeps going everywhere;
    break;
    case EVENT_FOUR :
   //and so on;
    break;

这是相同的official doc

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

switch语句跳转到正确的值,并一直持续到其他情况结束。

如果你想退出switch语句,你必须使用一个中断(或在某些情况下返回)。

这对于处理可以以相同方式处理许多值的情况很有用:

switch (x) {
    case 0:
    case 1:
    case 2:
        System.out.println("X is smaller than 3");
        break;
    case 3:
        System.out.println("X is 3");
    case 4:
        System.out.println("X is 3 or 4");
        break;
}

如果案例选择也是方法的最终条件,则可以从中返回。

public String checkX(int x) {
    switch (x) {
    case 0:
    case 1:
    case 2:
        return "X is smaller than 3";
    case 3:
        return "X is 3";
    case 4:
        return ("X is necessary 4");
    default:
        return null;

    }
}



}

它不是java bug。 这是你的逻辑错误。

在每个case陈述之后加上break语句以避免fall through困境。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM