Java:错误:变量可能尚未初始化我正在学习Java,我收到了这个错误。我知道这已被问过几次(很多次),但没有一个答案似乎回答了我的问题。代码的主体是:String[] number = {"too small", "one", "two", "three", "four", "too large"};int i;if(num<1){
i=0;}if(num==1){
i=1;}if(num==2){
i=2;}if(num==3){
i=3;}if(num==4){
i=4;}if(num>4){
i=5;}return number[i];其中变量'num'被声明,初始化并先前给出。我得到的错误是:“变量'我可能没有被初始化”并指向最后一行(返回数字[i];)。问题是,如果我声明'i'并立即赋值(int i = 0;),代码运行正常。但是如果我没有分配值,如果在每个'if'之后分配了一个可能的值,我会得到错误EVEN。例如,我没有用C得到这种错误。谢谢
3 回答
青春有我
TA贡献1784条经验 获得超8个赞
Java不分析if
块的逻辑,确定您的一个if
语句将运行并为其分配值i
。它很简单,它看到没有任何if
语句运行的可能性。在这种情况下,i
在使用之前不会赋值。
Java不会为局部变量赋予默认值,即使它为类变量和实例变量提供了默认值。 JLS的4.12.5节涵盖了这一点:
程序中的每个变量在使用其值之前必须具有值:
和
局部变量(§14.4,§14.14)必须在使用之前通过初始化(第14.4节)或赋值(第15.26节)显式赋值。
i
在声明时,将某种默认值指定给满足编译器的值。
int i = 0; // Your if statements are here. return number[i];
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
如果你想清理代码,你可以很容易地做到这一点:
String[] number = {"too small", "one", "two", "three", "four", "too large"};int i = num;if (i < 1) { i = 0; }if (i > 4) { i = 5; }return number[i];
或者,如果价值num
甚至不重要:
String[] number = {"too small", "one", "two", "three", "four", "too large"};if (num < 1) { num = 0; }if (num > 4) { num = 5; }return number[num];
即使你以前的代码在逻辑上似乎没问题,编译器也不能总是与人类智能竞争。赋予它默认值将有助于满足您的方法的安全性。
侃侃尔雅
TA贡献1801条经验 获得超16个赞
在大多数情况下,我不建议使用默认分配,因为我发现它可以隐藏问题 - 即忘记处理某些逻辑。相反,我通常使用一个适当的else
地方,它更明确,更清楚意图(例如,正确的解决方案也可能是提前返回或抛出异常)
添加回答
举报
0/150
提交
取消