Java 开关状态中有多个块?

Java 开关状态中有多个块?,java,switch-statement,Java,Switch Statement,这个Q相当于寻找一个验证 显示的内容类似于多个默认值 块是可以的: switch语句的主体称为switch块。开关块中的语句可以使用一个或多个大小写或默认标签进行标记。" 是否存在2+默认值阻塞的情况 可以存在于开关状态中?据我所知不可能。而且--没有意义。不。在开关语句中只能有一个默认块 int a = -1; switch (a) { case 0: System.out.println("zero"); break; case 1: System.out.println("one"); b

这个Q相当于寻找一个验证

显示的内容类似于多个
默认值
块是可以的:

switch语句的主体称为switch块。开关块中的语句可以使用一个或多个大小写或默认标签进行标记。"

是否存在2+
默认值
阻塞的情况
可以存在于
开关
状态中?据我所知不可能。而且--没有意义。

不。在开关语句中只能有一个默认块

int a = -1;
switch (a) {
case 0: System.out.println("zero"); break;
case 1: System.out.println("one"); break;
default: System.out.println("default");
}

如果添加第二个
默认值
,这将是编译时错误。

JLS始终是真正的参考:

值得注意的是,这:

给定switch语句,以下所有内容都必须为true或a 发生编译时错误:

  • 与switch语句关联的每个case常量的赋值必须与switch语句的类型兼容 表达式(§5.2)

  • 如果switch语句表达式的类型是枚举类型,则与switch语句关联的每个case常量都必须为 该类型的枚举常量

  • 与switch语句关联的case常量中没有两个具有相同的值

  • 与switch语句关联的case常量均不为null

  • 最多有一个默认标签与switch语句关联。

用不那么模棱两可的东西可能会更清楚,大致如下:

开关块语句可以用一个或多个
case
标签或单个可选的
default
标签进行标记


它只是说你可以有一个或多个标签,可以使用两种类型的标签:大小写和默认标签。它没有说明的是,你可以有多个大小写,只有一个默认标签。

开关块中的语句可以用一个或多个大小写或默认标签进行标记。

它从来没有说它可以有超过1个默认标签。这里“标签”与其他案例标签一起使用复数形式


声明多个默认语句是编译时错误

否,即使您可以这样做,switch语句也允许执行多行代码,因此当一个语句只需使用一次时,它实际上不会被使用两次

执行多行代码的switch语句示例:

switch (month){
        case 1: 
        monthString = "January"; 
        month = 2;
        System.out.println("It is " + monthString + " the " + month + "of the year");
        break;

        case 2: monthString = "February";
        break;
        }

检查文档。它没有说超过1个默认语句。但是,这很容易误导,因为它可以很容易地解释为“可以用(一个或多个)(大小写或默认标签)标记”。它会更清晰地表示为“用一个或多个案例标签标记,而不超过一个默认标签”。你的上一个统计数据破坏了它——我一直盯着它看。请编辑以便我可以接受