我遇到了switch语句的这种变化,我想知道在女巫的情况下可以使用它吗?
奇怪之处在于它之前没有默认值之前的情况。而且没有break
声明。但工作正常。
这是代码:
public static Item newItem() {
switch (rand.nextInt(3)) {
default:
case 0:
return new Scissors();
case 1:
return new Paper();
case 2:
return new Rock();
}
}
如何以这种奇怪的风格执行它。我试图轻松调试所有工作,它返回准确性一个显式实例。
问题:为什么我们需要写:
default:
case 0:
代替典型用法:
case 0:
default:
编译器不允许更改或评论default
声明。
有什么建议吗?
PS 请不要写愚蠢的解释switch
如何运作。很明显。只写这个明确的例子。
BTW 我在Thinking in Java by Bruce Eckel遇到了这种代码的和平。
答案 0 :(得分:3)
default
分支仅表示"未明确指定的所有选项的分支。将它放在switch-case
语句的末尾是一种约定,但不是必需的。
break
也不是必需的 - 如果switch-case
的一个分支没有以break
结尾,它将继续执行下一个分支中的代码 - 这称为< EM>下通。但是,在这里你不需要它,因为每个分支只是return
s,所以函数的执行不会继续。
答案 1 :(得分:1)
Return
导致退出。无需添加break
语句。
答案 2 :(得分:0)
break
是可选的。如果案例匹配且未遇到break
,则执行以下case
而不进行测试。这就是为什么
case 0:
default:
// Some code here
按预期工作。
default
案例很特别。如果没有其他case
匹配则执行。无论你把它放在哪里(在开头,中间或者最后都是自定义)。
在您的代码中,如果case 0:
匹配,则case 1:
不会仅因为函数永远不会执行而执行:而是返回new Scissors()
。
答案 3 :(得分:0)
该方法应返回一个值,如方法所声明的那样,因此它应该有一个return
语句。如果您对default
发表评论,则该方法可能不会返回该值。放置default
的位置并不重要,但是你应该这样做以满足返回条件。
答案 4 :(得分:-2)
可以修改代码以提高可读性和标准外观:
switch(...)
{
case 0:
...
case 1:
...
case 2:
...
default:
// Not reachable
throw new RuntimeException("Unexpected value");
}
默认标签是必要的,因为编译器无法猜测只有0,1和2是可能的。