猿问

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

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得到这种错误。

谢谢


Helenr
浏览 2656回答 3
3回答

青春有我

Java不分析if块的逻辑,确定您的一个if语句将运行并为其分配值i。它很简单,它看到没有任何if语句运行的可能性。在这种情况下,i在使用之前不会赋值。Java不会为局部变量赋予默认值,即使它为类变量和实例变量提供了默认值。&nbsp;JLS的4.12.5节涵盖了这一点:程序中的每个变量在使用其值之前必须具有值:和局部变量(§14.4,§14.14)必须在使用之前通过初始化(第14.4节)或赋值(第15.26节)显式赋值。i在声明时,将某种默认值指定给满足编译器的值。int&nbsp;i&nbsp;=&nbsp;0; //&nbsp;Your&nbsp;if&nbsp;statements&nbsp;are&nbsp;here. return&nbsp;number[i];

qq_花开花谢_0

如果你想清理代码,你可以很容易地做到这一点:String[]&nbsp;number&nbsp;=&nbsp;{"too&nbsp;small",&nbsp;"one",&nbsp;"two",&nbsp;"three",&nbsp;"four",&nbsp;"too&nbsp;large"};int&nbsp;i&nbsp;=&nbsp;num;if&nbsp;(i&nbsp;<&nbsp;1)&nbsp;{&nbsp;i&nbsp;=&nbsp;0;&nbsp;}if&nbsp;(i&nbsp;>&nbsp;4)&nbsp;{&nbsp;i&nbsp;=&nbsp;5;&nbsp;}return&nbsp;number[i];或者,如果价值num甚至不重要:String[]&nbsp;number&nbsp;=&nbsp;{"too&nbsp;small",&nbsp;"one",&nbsp;"two",&nbsp;"three",&nbsp;"four",&nbsp;"too&nbsp;large"};if&nbsp;(num&nbsp;<&nbsp;1)&nbsp;{&nbsp;num&nbsp;=&nbsp;0;&nbsp;}if&nbsp;(num&nbsp;>&nbsp;4)&nbsp;{&nbsp;num&nbsp;=&nbsp;5;&nbsp;}return&nbsp;number[num];即使你以前的代码在逻辑上似乎没问题,编译器也不能总是与人类智能竞争。赋予它默认值将有助于满足您的方法的安全性。

侃侃尔雅

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

相关分类

Java
我要回答