2012-11-04 11 views
7

Poniższy kod daje mi: The local variable str may not have been initializedPrzełącznik niezainicjowany zmienna

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); 

    } 


} 

Więc dałem str wartość null, i to działało, ale wciąż zastanawiam się, dlaczego jeden na docs pracować bez inicjalizacji wartości po pierwsze, mam potrójne sprawdzane i nie sądzę, mam jakieś literówki:

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); 
    } 
} 

Odpowiedz

13

Bo tam oświadczenie default przypadek w switch przykładu dokumentacji. Jest to wywoływane, jeśli nie pasuje żadna inna instrukcja case. W twoim własnym kodzie nie ma takiego "awaryjnego".

Dlatego zawsze jest wywoływana co najmniej jedna instrukcja, która zawsze inicjuje monthString.

Powiązane problemy