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);
}
}
Wenn ich diesen Code schrieb ich ausgegeben, um wie folgt erhalten:Erstellen Objekt in Java statische Schlüsselwort
ini
cons
stat
ini
cons
0
Hier, wenn ich ein neues Objekt in main(), class abc
erstellt wurde static
Variablen und Blöcke geladen und werden ausgeführt, so wie sie geschrieben sind. Wenn die Steuerung in Zeile 4 kam, wird static abc h = new abc();
Instance Initialization Block aufgerufen. Warum? Warum wird ein statischer Block nicht aufgerufen, wenn ein neues Objekt in Zeile 4 erzeugt wird und bis zu diesem Zeitpunkt ein statischer Block auch nicht einmal aufgerufen wurde, so sollte gemäß der Konvention ein statischer Block aufgerufen worden sein. Warum kommt diese unerwartete Ausgabe?
möglich Duplikat von [Java statische Klasseninitialisierung] (http://stackoverflow.com/questions/3499214/java-static-class-initialization) – DavidPostill
Statischer Code wird nur einmal ausgeführt, wenn das zweite Objekt erstellt wird (innerhalb der erster) es wird nicht ausgeführt. Ich bin überrascht, dass 'ini' an dieser Stelle ausgeführt wird. – Eypros
@ DavidPostill - Tagged Post löscht das Konzept, dass statische Initialisierung normalerweise passiert. Aber meine Hauptfrage ist, warum der statische Block nicht in Zeile 4 aufgerufen wird und stattdessen der Instanzinitialisierungsblock aufgerufen wurde. –