2012-11-04 13 views
7

Il seguente codice mi dà: The local variable str may not have been initializedInterruttore dichiarazione variabile non inizializzata

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

    } 


} 

Quindi, ho dato un valore strnull, e ha funzionato, ma sto ancora chiedendo perché quello sui documenti funziona senza inizializzare il valore in primo luogo, ho controllato tripla e io non credo di avere eventuali errori di battitura:

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

risposta

13

Perché c'è una dichiarazione default caso in switch dell'esempio documentazione. Viene chiamato se nessuna altra istruzione case corrisponde. Nel tuo codice, non hai tale "ripiego".

Quindi, c'è sempre almeno una dichiarazione che viene chiamata, che inizializzerà sempre monthString.

Problemi correlati