class abc {
int a = 0;
static int b;
static abc h = new abc(); //line 4
public abc() {
System.out.println("cons");
}
{
System.out.println("ini");
}
static {
System.out.println("stat");
}
}
public class ques {
public static void main(String[] args) {
System.out.println(new abc().a);
}
}
quando ho scritto questo codice sto ottenendo in uscita in ordine come questo:Creazione oggetto utilizzando parola chiave static in Java
ini
cons
stat
ini
cons
0
qui quando ho creato un nuovo oggetto in main(), class abc
ma ho caricato e static
variabili e blocchi vengono eseguiti nell'ordine in cui sono scritti. Quando il controllo è arrivato alla riga 4 static abc h = new abc();
viene chiamato il blocco di inizializzazione dell'istanza. Perché? perché il blocco statico non viene chiamato quando viene creato un nuovo oggetto alla riga 4 e fino a quel momento il blocco statico non è stato chiamato neanche una volta, quindi in base al blocco statico della convenzione avrebbe dovuto essere chiamato. Perché viene questa uscita inaspettata?
possibile duplicato del [Java inizializzazione classe statica] (http://stackoverflow.com/questions/3499214/java-static-class-initialization) – DavidPostill
statica del codice viene eseguito solo quindi una volta quando viene creato il secondo oggetto (all'interno della il primo) non viene eseguito. Sono sorpreso che "ini" sia eseguito a questo punto però. – Eypros
@ DavidPostill- Il post con tag elimina il concetto di come avviene normalmente l'inizializzazione statica. Ma il mio problema principale è che il blocco statico non viene chiamato alla riga 4 e invece è stato chiamato il blocco di inizializzazione dell'istanza. –