switch语句的行为,默认块位于顶部

时间:2013-12-24 10:06:18

标签: java switch-statement

我发现了一种在Java中使用switch语句的有趣方法,我无法理解所有逻辑。

有人可以帮助深入了解所有细节吗?

这是代码:

private static int counter = 0;

public static Shape randomFactory() {

    int xVal = rand.nextInt(100);
    int yVal = rand.nextInt(100);
    int dim = rand.nextInt(100);

    switch (counter++ % 3) {
    default:
    case 0:
        return new Circle(xVal, yVal, dim);
    case 1:
        return new Square(xVal, yVal, dim);
    case 2:
        return new Line(xVal, yVal, dim);
    }
}

一般来说,我理解这个逻辑,

default到底意味着什么:

switch (counter++ % 3) {
        default:

switch (counter++ % 3)如何找到等于大小写?这里没有提出任何brake

有什么建议吗?

8 个答案:

答案 0 :(得分:3)

在你的情况下,你在case语句的最开始使用default块,这有点奇怪,因为default意味着如果没有任何条件条件匹配,这部分代码将会执行。您还应该查看fall through。您通过返回避免使用它,但通常使用break完成。

switch (counter++ % 3)先计算counter++ % 3,然后将其与相应的case进行匹配。

答案 1 :(得分:2)

如果default表达式与任何switch标签不匹配,则

case标记将执行的块。在您的示例中,default不包含break,因此它会覆盖并执行与case 0相同的代码。

请注意,由于case表达式的每个可能值都有switch标签,因此default实际上是无操作。

答案 2 :(得分:1)

default:

它只是意味着switch语句中没有任何条件匹配代码,默认将执行。

答案 3 :(得分:0)

default中没有匹配时,

case将会执行。在这种情况下,default无效,因为它永远不会执行。请考虑以下情况。

 switch(input){
    case 1:
     // do something
    break;
    case 2:
     // do something
    break;
    default:
    // if input is not 1 or 2 this will execute. 
    break;  
 }

答案 4 :(得分:0)

default条款在这里没用:由于你的%3它永远不会发生。

您是否会将%3修改为%4它会捕获一些数据,但由于既没有break也没有return语句,它会像{{case 0一样执行1}}。

答案 5 :(得分:0)

默认值是一个开关标签,其中包含在没有其他标签匹配时要执行的语句。来自JLS §14.11

  • 最多一个默认标签可能与同一个switch语句相关联。
  • 如果没有大小写匹配但是有一个默认标签,那么切换块中匹配的默认标签之后的所有语句(如果有的话)都会按顺序执行。如果所有这些语句都正常完成,或者如果在默认标签之后没有语句,则整个switch语句正常完成。
  • 如果没有大小写匹配且没有默认标签,则不会采取进一步操作,并且switch语句正常完成。

因此,在这种情况下,default标签将不执行任何操作,因为总会有匹配项。

答案 6 :(得分:0)

默认情况下没有中断,所以它什么都不做,这只是一个落实的例子。

答案 7 :(得分:0)

请从这里阅读有关switch语句的信息 - http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

默认表示如果任何情况与switch条件不匹配,则调用default。

计数器++%3 ..你的计数器为0所以它将与情况0匹配。