Einer meiner Freunde fragte mich, was die erste statische Variable oder statischen Block laden würde.
Meine Antwort zeigt auf eine statische Variable.
Also hat er mir zwei Gleichungen gegeben und gesagt, zwischen ihnen zu unterscheiden. Erste Gleichung
O / P: 0 90
Zweite Gleichung
O / P: 90 90
Ich habe versucht, den Bytecode zu dekompilieren und fand heraus, dass es für die obige Gleichung gleich ist. Bitte hilf mir, zwischen ihnen zu unterscheiden. Ich bin verwirrt, wenn die statische Variable initialisiert wird.
Statische Blöcke werden in der Reihenfolge initialisiert, in der sie in der Quelldatei erscheinen. Zu diesem Thema gibt es bereits einige Fragen zu Stack Overflow ... Dieser hat eine gute Antwort für Sie: Java: in welcher Reihenfolge Sind statische Endfelder initialisiert?
statische Variablen und statische Blöcke werden in einer Reihenfolge ausgeführt, in der sie erscheinen.
Hier zuerst O / P: 0 90 wie in der Anweisung System.out.println(Some.x);
des statischen Blocks, der nach der Initialisierungsanweisung der statischen Variablen static int x=90;
static Variablen werden ausgeführt, wenn die JVM die Klasse lädt, und die Klasse wird geladen, wenn sie entweder instanziiert oder ihre statische Methode aufgerufen wird.
Der statische Initialisiererblock wird initialisiert, bevor die Klasse instanziiert wird oder bevor ihre statische Methode aufgerufen wird, und sogar bevor ihre statische Variable verwendet wird.
Ich gebe ein einfaches Beispiel für den Kontrollfluss von statischen und instance-stuffs:
Angenommen, Sie haben 2 Klassen A und B. Klasse A erstreckt sich auf Klasse B. und Klasse B hat eine Hauptmethode. Nach der erfolgreichen Kompilierung von beiden ist Ihr Befehl auf cmd wie folgt:
%Vor%Was nun geschehen wird, sehen Sie Schritt für Schritt:
der Konstruktor der Klasse A (Standardkonstruktor oder jeder andere, wenn Sie ihn aus dem Konstruktor von B aufgerufen haben) ausgeführt werden
dann alle Instanzen Die Initialisierung der Mitglieder und die Ausführung des Instanzblocks erfolgen in Klasse B
Hinweis: Die Ausführung statischer Member und Blöcke wird nur ein einziges Mal ausgeführt, während die Klasse zum ersten Mal geladen wird, während Instanzelemente und Instanzblöcke jedes Mal ausgeführt werden, wenn wir ein Objekt der Klasse erstellen. Bitte lassen Sie mich wissen, wenn ich nicht korrekt bin.