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) ?
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!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) ?![]()
SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
Di questo libro e degli altri (blog personale di recensioni libri) | NO M.P. TECNICI
Pensa se dal prossimo mese decidono che il valore di default che viene impostato per variabili non dichiarate è true/1/nullOriginariamente 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) ?![]()
al volante son nervoso
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
Le variabili non inizializzate esplicitamente, sono impostate dalla JVM immagino, giusto?Originariamente inviato da Alex'87
![]()
Anche volendo, ormai è troppo tardi per fare una modifica del genere![]()
Sarebbe sufficiente rilasciare una jre che invece di impostare a null/0/false faccia altro?
al volante son nervoso
no speriamo che non lo facciano...![]()
No: l'inizializzazione delle variabili al loro valore di default è effettuato in fase di compilazione, non di esecuzione.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?
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.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.
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
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
No, è proprio il contrario! I valori di "default" sono impostati dalla JVM .... non c'è del codice nel bytecode della classe per fare questo.Originariamente inviato da LeleFT
No: l'inizializzazione delle variabili al loro valore di default è effettuato in fase di compilazione, non di esecuzione.
L'output è: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(); } }
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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