Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    inizializzare variabili, ma tutte?

    volevo sapere, se una classe ha tantissime variabili, nel costruttore posso non inizializzare quelle che poi mi interessano che abbiano il valore di default(false/0/null) ?

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: inizializzare variabili, ma tutte?

    Originariamente inviato da Lucked
    volevo sapere, se una classe ha tantissime variabili, nel costruttore posso non inizializzare quelle che poi mi interessano che abbiano il valore di default(false/0/null) ?
    Certo!
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502

    Re: inizializzare variabili, ma tutte?

    Originariamente inviato da Lucked
    volevo sapere, se una classe ha tantissime variabili, nel costruttore posso non inizializzare quelle che poi mi interessano che abbiano il valore di default(false/0/null) ?
    Pensa se dal prossimo mese decidono che il valore di default che viene impostato per variabili non dichiarate è true/1/null
    al volante son nervoso

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Re: inizializzare variabili, ma tutte?

    Originariamente inviato da Rubox
    Pensa se dal prossimo mese decidono che il valore di default che viene impostato per variabili non dichiarate è true/1/null


    Anche volendo, ormai è troppo tardi per fare una modifica del genere
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502

    Re: Re: Re: inizializzare variabili, ma tutte?

    Originariamente inviato da Alex'87


    Anche volendo, ormai è troppo tardi per fare una modifica del genere
    Le variabili non inizializzate esplicitamente, sono impostate dalla JVM immagino, giusto?
    Sarebbe sufficiente rilasciare una jre che invece di impostare a null/0/false faccia altro?
    al volante son nervoso

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    no speriamo che non lo facciano...

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Re: Re: Re: Re: inizializzare variabili, ma tutte?

    Originariamente inviato da Rubox
    Le variabili non inizializzate esplicitamente, sono impostate dalla JVM immagino, giusto?
    Sarebbe sufficiente rilasciare una jre che invece di impostare a null/0/false faccia altro?
    No: l'inizializzazione delle variabili al loro valore di default è effettuato in fase di compilazione, non di esecuzione.

    Da: http://java.sun.com/docs/books/tutor...datatypes.html
    It's not always necessary to assign a value when a field is declared. Fields that are declared but not initialized will be set to a reasonable default by the compiler.
    Quindi, al di là della non ragionevolezza della cosa, l'unica modifica che potrebbe portare a comportamenti inaspettati sarebbe quella del compilatore. Questo richiederebbe la ri-compilazione dell'applicazione, che dovrebbe sempre essere fatta con le specifiche della JDK per la quale essa è stata sviluppata. Quindi il problema non sussiste.


    Cosa diversa per le variabili locali che devono essere inizializzate prima di essere usate. Altrimenti viene sollevato un errore in fase di compilazione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502

    Re: Re: Re: Re: Re: inizializzare variabili, ma tutte?

    Originariamente inviato da LeleFT
    No: l'inizializzazione delle variabili al loro valore di default è effettuato in fase di compilazione, non di esecuzione.



    Quindi, al di là della non ragionevolezza della cosa, l'unica modifica che potrebbe portare a comportamenti inaspettati sarebbe quella del compilatore. Questo richiederebbe la ri-compilazione dell'applicazione, che dovrebbe sempre essere fatta con le specifiche della JDK per la quale essa è stata sviluppata. Quindi il problema non sussiste.


    Cosa diversa per le variabili locali che devono essere inizializzate prima di essere usate. Altrimenti viene sollevato un errore in fase di compilazione.


    Ciao.
    va beh, tanto sono abituato a dire cretinate io.
    al volante son nervoso

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Re: Re: inizializzare variabili, ma tutte?

    Originariamente inviato da LeleFT
    No: l'inizializzazione delle variabili al loro valore di default è effettuato in fase di compilazione, non di esecuzione.
    No, è proprio il contrario! I valori di "default" sono impostati dalla JVM .... non c'è del codice nel bytecode della classe per fare questo.

    codice:
    public class Prova {
        { System.out.println(this.x); }   // Va usato 'this' per via del riferimento in "avanti" di x
    
        private int x = 4;
    
        { System.out.println(x); }
    
        public static void main(String[] args) {
            new Prova();
        }
    }
    L'output è:
    0
    4

    Quando viene istanziata la classe con new Prova() la JVM alloca spazio sul heap per l'oggetto che comprende tutte le variabili di istanza della classe e superclassi e le mette tutte al valore di "default". Questo garantisce che non si potrà mai vedere "spazzatura"!
    E poi solo dopo che il super-costruttore è stato eseguito, allora verranno eseguiti tutti gli inizializzatori e i blocchi di inizializzazione di istanza (in ordine rigorosamente "testuale").

    Il codice sopra evidenzia che è possibile per un breve momento "vedere" il valore di default della variabile, prima che venga eseguito il codice esplicito per la inizializzazione a 4 (questo sì, generato dal compilatore e presente nel bytecode).

    Nessuna critica comunque, volevo solo precisare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Mi sa che la questione non è chiara o che mi sono spiegato male io: si sta parlando del "default value" per i tipi di dato.

    Come da documentazione della Sun che ho riportato sopra, è il compilatore che decide qual è il valore di default e, di conseguenza, di far assegnare lo 0 dalla JVM alle variabili intere non inizializzate (e non di assegnargli, ad esempio, -1).

    Sul resto siamo tutti d'accordo.

    Quello che intendo dire è che quel codice produrrà sempre quell'output, e non potrà produrre, in futuro (a causa di un cambiamento della JVM, senza ulteriori ricompilazioni) un output del tipo

    -1
    4

    Almeno me lo auguro, altrimenti alcune cosucce andrebbero perlomeno modificate sulla documentazione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.