Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    415

    Inizializzare tutte le variabili?

    Ciao a tutti,
    volevo chiedere un chiarimento: in una delle prime sezioni del manuale che sto seguendo, veniva suggerito di inizializzare ad un valore iniziale tutte le variabili locali presenti all'interno di un metodo per evitare problemi (quali?). Conviene inizializzare ad un valore iniziale anche gli altri tipi di variabili?

  2. #2
    le variabili di classe vengono inizializatti dal classloader con i valori di default del tipo di variabile quelle nei metodi invece no, percio rimarebbero a null e se usi quella variabile e non viene inizializzata andresti incontro a errori non previsti.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Teo80
    per evitare problemi (quali?)
    La questione è una sola: una variabile locale deve essere inizializzata prima di poter essere usata.

    Le specifiche del linguaggio dicono: Each local variable (§14.4) and every blank final (§4.12.4) field (§8.3.1.2) must have a definitely assigned value when any access of its value occurs..

    Il compilatore effettua una "analisi del flusso conservativa" per verificare che qualunque sia il percorso di esecuzione del codice, prima dell'utilizzo di una variabile locale essa sia inizializzata.

    Ecco un esempio:

    codice:
    public static void test ()
    {
        for (int i=0; i<3; i++) {
            String s;
    
            switch (i) {
                case 0: s = "zero"; break;
                case 1: s = "uno"; break;
                case 2: s = "due"; break;
            }
            
            System.out.println (s);
        }
    }
    Anche se tu sai che nel corpo del for la variabile 'i' può assumere solo i valori 0, 1, 2, il compilatore non lo sa. Lui sa solo che l'espressione dello switch è una variabile intera, che potrebbe avere qualunque valore, non solo 0,1,2 e quindi teoricamente è possibile che nessuno dei 3 case venga eseguito e allora la variabile 's' non verrebbe inizializzata.

    Il metodo sopra non compila, viene segnalato un errore: variable s might not have been initialized

    Come risolverlo? O si inizializza subito la variabile con qualcosa es:

    String s = "";

    Oppure si può mettere un default: nello switch dove si assegna qualcosa alla variabile.

    Originariamente inviato da Romeo25
    quelle nei metodi invece no, percio rimarebbero a null
    Sbagliato. Le variabili locali non hanno un valore di "default". Vedi spiegazione sopra.

    Originariamente inviato da Romeo25
    e se usi quella variabile e non viene inizializzata andresti incontro a errori non previsti.
    Si andrebbe incontro ad un errore di compilazione, ovviamente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.