Quando dovremmo usare una variabile finale statica non inizializzata? So che una variabile finale statica non inizializzata può essere assegnata solo a valori nel blocco di inizializzazione statico, ma non riesco a pensare a un reale utilizzo per questo.Quando dovremmo usare una variabile finale statica non inizializzata?
risposta
suppongo che voi dire:
public static final Object obj;
con nessun valore iniziale esplicitamente assegnato?
È possibile assegnarlo nel blocco static
in base ad alcuni calcoli che possono verificarsi solo in fase di esecuzione, ad esempio la lettura di alcuni file di proprietà per creare una costante a livello di applicazione che non è nota al momento della compilazione.
grazie mille! –
@Tudor, Perché il valore predefinito è 'null'? Questo comportamento è garantito nelle specifiche? Mi sembra che il valore predefinito non sia definito perché non saremmo in grado di leggerlo prima dell'assegnazione in primo luogo (errore del compilatore). – Pacerier
@Pacerier: ben individuato. Sarebbe davvero un errore in fase di compilazione non assegnare un valore a un campo 'finale' e la specifica dice che il default non verrà mai osservato per tali campi. Ho corretto la mia risposta. – Tudor
Viene utilizzato quando l'inizializzazione della variabile non può essere eseguita in una singola riga. Ad esempio:
private static final Map<String, String> CACHE;
static {
Map<String, String> cache = new HashMap<String, String>();
cache.put("foo", "bar");
cache.put("zim", "bam");
// lots of other entries
CACHE = Collections.unmodifiableMap(cache);
}
pratica se necessario assegnare un valore che non può essere facilmente rappresentato in una singola espressione. Ad esempio, potresti voler fare un po 'di logica per costruire una mappa immutabile e poi assegnarla.
genere è più leggibile per mettere la logica "edificio" in un metodo statico separata, e l'uso che nell'assegnazione normale però:
private static final Map<String, String> FOO_MAP = buildFooMap();
grazie! Mi dà una spiegazione migliore. –
Statico + finale
Insomma,
Static - per renderlo il più una variabile di classe - indipendente dall'oggetto (accessibile ad ogni oggetto nella stessa posizione sempre)
Finale - per renderlo costante. (Se finale è prima di una variabile di corso!)
Dove abbiamo bisogno solo statico?
=> Può essere il conteggio del numero di istanze di un oggetto.
Dove abbiamo bisogno solo del finale?
=> Bene, per fare qualcosa di costante!
Dove abbiamo bisogno di statico + finale?
=> Rende la variabile accessibile a ogni oggetto e per creare una costante.Come può essere la creazione di una classe per COLOR.
Per le variabili statiche vuote, l'inizializzazione è stata eseguita dal blocco statico.
public class StaticDemo
{
private static final String name;
static
{
name = "yash";
}
}
e perché utilizzare uno bianco? dato che potrebbe non essere possibile inizializzare all'inizio. Accetto quello precedente.
Se l'inizializzatore per un campo statico può generare un'eccezione, non è possibile inizializzarlo in una riga, è necessario disporre di un blocco statico o di un metodo statico.
grazie! Può essere un uso della variabile finale statica non inizializzata. –
La variabile finale statica deve essere inizializzata al momento della creazione, diversamente dalle variabili finali vuote, non è possibile rinviare l'inizializzazione al costruttore perché sono statici.
- 1. Variabile non inizializzata Java con curiosità finale
- 2. Quando dovremmo usare la classe e quando non dovremmo
- 3. Quando dovremmo (davvero) usare RenderScript?
- 4. accesso variabile finale statica utilizzando la riflessione
- 5. Differenza tra statica finale e statica finale
- 6. quando dovremmo usare instanceof e quando non è
- 7. Differenza di comportamento: membro statico finale inizializzato 'null' e variabile locale finale inizializzata 'null'
- 8. SPL vs. Array: quando dovremmo usare SPL e quando dovremmo usare l'array in PHP?
- 9. modifica delle variabili finali tramite la riflessione, perché differenza tra variabile finale statica e non statica
- 10. Quando dovremmo usare. Poi con Protractor Promise?
- 11. Quando dovremmo usare Mockery vs JUnit4Mockery?
- 12. Interruttore dichiarazione variabile non inizializzata
- 13. java: come dichiarare una variabile finale che è inizializzata all'interno di un blocco try-catch?
- 14. Perché una variabile finale deve essere inizializzata prima che il costruttore sia completato?
- 15. Accesso Java valore della variabile statica finale attraverso la riflessione
- 16. Variabile finale statica privata all'interno di un enum
- 17. perché una variabile di constexpr non inizializzata non è costante?
- 18. interpretazione variabile finale
- 19. Una variabile statica const può essere inizializzata in un file di intestazione C++?
- 20. Quale controllo sorgente dovremmo usare
- 21. perché non dovremmo usare ++ in javascript?
- 22. Quanto è sicuro l'utilizzo. = Operatore su una variabile non inizializzata?
- 23. NetBeans "La variabile $ out sembra non inizializzata"
- 24. Variabile globale C++ non inizializzata quando collegata tramite librerie statiche, ma OK quando compilata con l'origine
- 25. funzione statica e variabile statica e variabile
- 26. finale e statica in Java
- 27. Perché mantenere una variabile statica?
- 28. statica lungo serialVersionUID finale = 1L
- 29. Ruby "variabile di istanza non inizializzata" avvertimento
- 30. Perché non posso inizializzare una variabile statica chiamando una funzione statica in Swift?
forse _never_? –
Cosa intendi per "vuoto"? Intendi una variabile 'static final' inizializzata a' null'? O intendi qualsiasi tipo di variabile 'static final' (' statico finale privato ', 'finale statico pubblico', ecc.)? –
Vuol dire vuoto come in non inizializzato. – fivedigit