使用开关块时遇到“未初始化变量”错误。
这是我的代码:
public static void foo(int month)
{
String monthString;
switch (month)
{
case 1: monthString = "January";
break;
case 2: monthString = "February";
break;
}
System.out.println(monthString);
}
错误:
Switch.java:17: error: variable monthString might not have been initialized
System.out.println (monthString);
据我所知,当您尝试访问一个尚未初始化的变量时会发生此错误,但是当我在switch块中为其赋值时,是否没有初始化它?
同样,即使月份是编译时常量,我仍然会收到相同的错误:
public static void foo()
{
int month = 2;
String monthString;
switch (month)
{
case 1: monthString = "January";
break;
case 2: monthString = "February";
break;
}
System.out.println(monthString);
}
如果month
不是1
,2
则执行路径中没有在monthString
引用之前初始化的语句。即使is ,编译器也不会假定该month
变量保留其2
值。month
final
在JLS,第16章,关于“明确赋值”的谈判,并在其下一个变量可以是条件,它引用之前“明确赋值”。
除了条件布尔运算符&&,||和?的特殊处理外 :和布尔值常量表达式,在流分析中不考虑表达式的值。
monthString
在引用变量之前,未明确分配该变量。
在switch
块之前对其进行初始化。
String monthString = "unrecognized month";
或者default
在switch
语句中的情况下将其初始化。
default:
monthString = "unrecognized month";
或抛出异常
default:
throw new RuntimeExpception("unrecognized month " + month);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句