2012-11-04 132 views
7

下面的代碼給我:The local variable str may not have been initializedswitch語句未初始化的變量

public class experiment{ 

    public static void main(String[] args){ 

     int day = 1; 
     String str; 

     switch (day) { 
     case 1 : str = "nice"; 
     break; 
     } 

     System.out.println(str); 

    } 


} 

所以,我給了一個strnull,和它的工作,但我一直在想,爲什麼不經過初始化值的文檔的一個工作首先,我三重檢查,我不認爲我有任何錯別字:

public class SwitchDemo { 
    public static void main(String[] args) { 

     int month = 8; 
     String monthString; 
     switch (month) { 
      case 1: monthString = "January"; 
        break; 
      case 2: monthString = "February"; 
        break; 
      case 3: monthString = "March"; 
        break; 
      case 4: monthString = "April"; 
        break; 
      case 5: monthString = "May"; 
        break; 
      case 6: monthString = "June"; 
        break; 
      case 7: monthString = "July"; 
        break; 
      case 8: monthString = "August"; 
        break; 
      case 9: monthString = "September"; 
        break; 
      case 10: monthString = "October"; 
        break; 
      case 11: monthString = "November"; 
        break; 
      case 12: monthString = "December"; 
        break; 
      default: monthString = "Invalid month"; 
        break; 
     } 
     System.out.println(monthString); 
    } 
} 

回答

13

因爲有一個在文檔和示例的switch一個default case語句。如果沒有其他case語句匹配,則調用它。在你自己的代碼中,你沒有這種「後備」。

因此,總是至少有一個被調用的語句,它將始終初始化爲monthString