str
è una costante fase di compilazione - n
non è, perché è di tipo Float
. Se lo cambi in final static float n = 130f
, vedrai il valore nel blocco di inizializzazione statico.
Così attualmente, nel blocco di inizializzazione statica, il valore di str
viene effettivamente inline - il codice è equivalente a:
System.out.println("nitesh "+test.n);
Da JLS section 15.28 (constant expressions):
Un'espressione costante è un'espressione denotando un valore di tipo primitivo o una stringa che non si completa bruscamente e viene composta utilizzando solo quanto segue: [...]
Float
non è un tipo primitivo.
Inoltre, anche senza la funzione di allineamento, la variabile costante str
viene inizializzata prima dell'esecuzione di uno qualsiasi dei blocchi di inizializzazione statici. Da section 12.4.2 of the JLS (dettagli inizializzazione classe):
- ...
- Poi, inizializzare i campi statici di C che sono variabili costanti (§4.12.4, §8.3.2, §9.3.1) .
- ...
- Successivamente, eseguire gli inizializzatori di variabile di classe e gli inizializzatori statici della classe o gli inizializzatori di campo dell'interfaccia, in ordine testuale, come se fossero un blocco singolo.
fonte
2014-06-13 10:19:17
[ 'Questa domanda dovrebbe essere chiuso perché è risposto da JonSkeet'] (http://meta.stackexchange.com/a/13300/256679) –