Chi può spiegare cosa sta succedendo?Il blocco statico non viene chiamato
public class MagicFinal {
public static void main(String[] args) {
System.out.println(A.s);
}
}
class A {
static {
System.out.println("class has been loaded");
}
public static final String s = "final";
public static final Integer i = 3;
}
Console:
finale
cosa si tratta? Non capisco perché la classe non sia stata caricata, so che le lezioni vengono sempre caricate alla prima chiamata. Il campo s
è in un pool di stringhe e vedo che il modificatore finale è magico. campo ho cambiato:
Se cancello modificatore finale (public static String s = "final"
) mi metterò
Console:
classe è stata caricata
finale
Nota i
: public static final int i = 3;
e mostralo in conso le. Ho ottenuto lo stesso come nella situazione di stringa. Perché?
Ok, grazie mille !! Che dire int ?? public static final int i = 3; // non è stata caricata la classe di scrittura public static final Intero i = 3; // è stata caricata la classe di scrittura – idmitriev
Leggere la definizione dell'espressione della costante in fase di compilazione a cui ho collegato la risposta. 'int' è un valore primitivo,' String' è l'unico caso speciale di un valore tipizzato di riferimento che può essere coinvolto in un'espressione costante e 'Integer' non è né l'uno né l'altro. –
@marko - Mi stai dicendo che la Classe A non viene caricata affatto ?? o è un caso di inizializzazione pigra ??? – TheLostMind