Java中的switch语句中是否必须包含默认大小写
我只是想知道Java中的switch语句中是否必须包含默认情况。我理解将默认情况包括在内是一种良好的做法。我之所以这样问是因为对于下面的代码,如果我删除默认情况,代码将提供错误。有人能帮我澄清一下这个概念吗?提前感谢您的帮助Java中的switch语句中是否必须包含默认大小写,java,switch-statement,default,Java,Switch Statement,Default,我只是想知道Java中的switch语句中是否必须包含默认情况。我理解将默认情况包括在内是一种良好的做法。我之所以这样问是因为对于下面的代码,如果我删除默认情况,代码将提供错误。有人能帮我澄清一下这个概念吗?提前感谢您的帮助 public class SwitchDemo { public static void main(String[] args) { int month = 8; String monthString; 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);
}
}
虽然
default
子句不是强制性的,但如果将其删除,monthString
可能无法初始化,因此当您尝试使用System.out.println(monthString)打印它时,会出现编译错误代码>
如果在声明monthString
时为其提供默认值,则可以删除default
子句。例如:
String monthString = "Invalid month";
这将提供与当前switch语句相同的行为,其中包括default子句。不要求有一个default
案例,但最好有一个,因为这会捕获您有意不想处理(或无意不处理)的案例
作为参考点,需要一个默认值
案例
在您的代码中,假设您不受特定样式规则的限制,该规则需要默认值
情况,那么您就不需要它;在使用monthString
之前,您只需明确指定它(语言规范中的一项要求)。但是,为1-12范围之外的月份值指定一个值是没有意义的,这在逻辑上是错误的
在这里抛出异常是一件明智的事情,例如:
default:
throw new IllegalArgumentException("Invalid month");
如果您查看您的程序,您将发现自己的错误,因为初始化错误
这里
int month = 8;
String monthString; //it is a local Variable and not Initialized.
monthString
在声明时未初始化,并且此变量
没有全局访问权限(非全局变量),因此它可以使用任何构造函数或任何其他源进行初始化
在所有案例中的switch
语句中
都初始化了变量monthString
。如果你把每一个代码> >案例< /代码>和<代码>默认< /代码>作为一个不同的分支,那么你会意识到,在所有可能的分支中,这个<代码>代码< /代码>正在被执行。在每个可能性变量中,monthString
都会初始化,但如果删除此代码
default: monthString = "Invalid month"; //if delete will produce error
break;
然后可能会出现默认
情况(如果所有情况都失败)。因此,间接地,你没有考虑这个默认的代码>代码< < /代码>,但是有可能。
如果仍要删除default
案例,则在声明时初始化变量monthString
。它还将删除编译时错误
这就是删除default
关键字后出错的原因
谢谢在声明时使用默认值初始化变量,然后再使用它来避免上述情况,这是一种很好的做法。很好的解释Eran@Victor我不同意。明确赋值是为了确保所有代码路径都指定了您想要指定的值。最好只指定一次要指定的值;立即赋值(或者重写)会减少编译器对代码正确性的一层检查。