2012-11-04 108 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