为了账号安全,请及时绑定邮箱和手机立即绑定

Java:错误:变量可能尚未初始化

Java:错误:变量可能尚未初始化

Helenr 2019-08-28 15:51:10
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];


查看完整回答
反对 回复 2019-08-28
?
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];

即使你以前的代码在逻辑上似乎没问题,编译器也不能总是与人类智能竞争。赋予它默认值将有助于满足您的方法的安全性。


查看完整回答
反对 回复 2019-08-28
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

在大多数情况下,我不建议使用默认分配,因为我发现它可以隐藏问题 - 即忘记处理某些逻辑。相反,我通常使用一个适当的else地方,它更明确,更清楚意图(例如,正确的解决方案也可能是提前返回或抛出异常)

查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 2655 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信