Java switch语句的奇怪语义
我遇到了switch语句的这种变体,我想知道在巫婆的情况下它可以被使用吗 奇怪的是,它在默认值之前没有案例,只有在默认值之后才有案例。并且没有Java switch语句的奇怪语义,java,switch-statement,Java,Switch Statement,我遇到了switch语句的这种变体,我想知道在巫婆的情况下它可以被使用吗 奇怪的是,它在默认值之前没有案例,只有在默认值之后才有案例。并且没有break语句。但效果很好 以下是代码: public static Item newItem() { switch (rand.nextInt(3)) { default: case 0: return new Scissors(); case 1: return new Paper();
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请不要愚蠢地解释开关是如何工作的。很清楚。只写这个明确的例子
顺便说一句我在遇到了这种代码的平静。返回
导致退出。无需添加break
语句。默认的分支仅表示“未明确指定的所有选项的分支。通常将其放在开关盒
语句的末尾,但不是必需的
中断
也不是必需的-如果开关盒的分支
没有以中断
结束,它将继续在下一个分支中执行代码-这称为故障排除。但是,这里不需要它,因为每个分支只返回
,因此函数的执行不会继续。 中断
是可选的。如果案例匹配且未遇到中断
,则在不进行测试的情况下执行以下案例
。这就是原因
case 0:
default:
// Some code here
按你的期望工作
<代码>默认是特殊的。如果没有其他<代码> CASE < /C>匹配,它将被执行。不管你放在哪里(在开始时,在中间,或者在结尾处是(自定义))。
在您的代码中,如果case 0:
匹配,则不会执行case 1:
,这仅仅是因为函数永远不会执行得太远:而是返回一个新剪刀()
。可以修改代码以提高可读性和标准外观:
switch(...)
{
case 0:
...
case 1:
...
case 2:
...
default:
// Not reachable
throw new RuntimeException("Unexpected value");
}
默认标签是必需的,因为编译器无法猜测只有0、1和2是可能的。该方法应该返回一个值,正如该方法声明的那样,因此它应该有一个return
语句。如果注释Default
,该方法可能不会返回该值。将Default
放在何处并不重要,但是您应该这样做以满足返回条件。可能重复的return
会导致开关退出该方法,因此不会执行以下任何选项。@OliverCharlesworth我们有返回语句,因此不需要任何break
语句。但为什么要在默认语句之后。无论将放在何处ode>default
语句。尽管通常将其放在开关的末尾。