[英]Java: Error: variable might not have been initialized
我正在學習 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];)。
問題是,如果我聲明 'i' 並立即分配一個值 (int i=0;) 代碼運行良好。 但是,如果我不分配值,即使在每個“如果”之后分配了可能的值,也會出現錯誤。
例如,我不會在 C 中遇到這種錯誤。
謝謝
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];
如果你想清理代碼,你可以很容易地做到這一點:
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];
即使您之前的代碼在邏輯上看起來沒問題,編譯器也不能總是與人類智能競爭。 給它默認值將有助於滿足您的方法的安全性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.