2014-08-27 78 views
1

这个Q宁可寻找验证。开关状态中的多个块?

Java docs on switch statement读象多个default 块是OK:

switch语句的主体被称为开关块。交换机模块中的语句可以标注一个或多个案例或默认标签。 “

是否有任何情况下,(s)表示2+ default块 可以在switch统计存在吗?不能成为我的知识。furthermore--就没有意义。

+0

检查docs.It不说超过1所缺省陈述.. – 2014-08-27 18:39:16

回答

0

号您只能有一个默认块在switch语句。

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

如果添加了第二default这将是一个编译时错误。

1

的JLS是ALW AYS真正的参考:

http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.11

值得注意的是,这样的:

给出一个switch语句,以下所有条件必须为真或发生 编译时错误:

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

  • 如果switch语句的Expression类型是枚举类型,那么与switch语句关联的每个case常量必须是 该类型的枚举常量。

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

  • 没有与switch语句关联的case常量为null。

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

这很可能是用的东西少暧昧,大致清晰的:

开关语句块可以与一个或多个case标签,或单一,可选default标签来标记。

+0

你最后的统计。破坏它 - 我一直盯着它。请编辑,以便我可以接受 – Roam 2014-08-27 18:57:12

0

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

0

A statement in the switch block can be labeled with one or more case or default labels

它从来没有说,它可以有超过1个默认labels.Here“标签”以复数形式使用与其他情况下的标签相结合。

这是编译时错误申报超过1个缺省陈述

+0

这很容易让人误解,因为它很容易被解释为“可以用(一个或多个)(案例或默认标签)来标注,因为”标有一个或多个案例标签,并且不超过一个默认标签“。 – 2014-08-27 18:40:46

+0

@DaveNewton right – 2014-08-27 18:49:48

0

没有,即使你能做到这一点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; 
     }