簡體   English   中英

Java:錯誤:變量可能尚未初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM