我只是想知道Java中的switch语句中是否必须包含默认情况。我理解包含默认案例是一种好习惯。我问的原因是因为对于下面的代码,如果我删除默认情况,代码将提供错误。有人可以帮我澄清一下这个概念吗?在此先感谢您的帮助!
public class SwitchDemo {
public static void main(String[] args) {
int month = 8;
String monthString;
switch (month) {
case 1: monthString = "January";
break;
case 2: monthString = "February";
break;
case 3: monthString = "March";
break;
case 4: monthString = "April";
break;
case 5: monthString = "May";
break;
case 6: monthString = "June";
break;
case 7: monthString = "July";
break;
case 8: monthString = "August";
break;
case 9: monthString = "September";
break;
case 10: monthString = "October";
break;
case 11: monthString = "November";
break;
case 12: monthString = "December";
break;
default: monthString = "Invalid month"; //if delete will produce error
break;
}
System.out.println(monthString);
}
}
答案 0 :(得分:6)
虽然default
子句不是必需的,但如果删除它,monthString
可能无法初始化,因此当您尝试使用System.out.println(monthString);
打印时会出现编译错误。< / p>
如果在声明时为default
提供默认值,则可以删除monthString
子句。例如:
String monthString = "Invalid month";
这将提供与当前switch语句相同的行为,其中包括default子句。
答案 1 :(得分:0)
不需要default
个案例,但最好有一个案例,因为这会抓住你故意不想处理的案件(或者无意中没有&#t; t 处理)。
作为参考点,Google Java style guide需要default
个案例。
在您的代码中,假设您没有要求default
案例的特定样式规则的限制,您就不需要它;您只需要明确分配 monthString
才能使用它(语言规范中的要求)。但是,为1-12范围之外的月份值指定值是没有意义的 - 这在逻辑上是错误的。
抛出异常是明智之举,例如:
default:
throw new IllegalArgumentException("Invalid month");
答案 2 :(得分:0)
如果您查看自己的程序,由于初始化错误,您会自行发现错误。
这里
int month = 8;
String monthString; //it is a local Variable and not Initialized.
monthString
在声明时未初始化,此Variable
没有全局访问(不是全局变量),因此可以使用任何构造函数进行初始化或任何其他来源。
在您switch
的所有case
语句中,您已初始化变量monthString
。如果您将每个case
和default
视为不同的分支,那么您将意识到在所有可能的分支中,此code
正在执行。在每种可能性中,变量monthString
都已初始化,但如果删除此代码
default: monthString = "Invalid month"; //if delete will produce error
break;
然后可能会出现default
个案(如果所有案件都失败)。所以,间接地你不会考虑这个默认值case
,但有可能存在这种情况。
如果您仍想删除default
个案,请在声明时初始化变量monthString
。它还会删除您的编译时错误。
这是删除
default
关键字后出错的原因。
谢谢