Ich dachte ursprünglich, dass statische Blöcke für statische Variablen sind, aber der Compiler erlaubt sowohl A als auch B zu kompilieren und auszuführen, was gibt?
A
B
%Vor% Ausführen von System.out.println(Main.m.toString());
für A druckt
{}
aber das gleiche für B läuft in Yoda-speak
aus{dies = Arbeit, warum = tut}
Der nicht statische Block wird ausgeführt, wenn eine "Instanz" der Klasse erstellt wird.
Also
%Vor%druckt nichts, weil Sie keine Instanz erstellt haben.
Versuchen Sie zuerst, eine Instanz zu erstellen.
%Vor%und Sie sehen dieselbe Nachricht wie B
Wie Sie wissen, sind Klassenvariablen (die mit static deklariert wurden) beim Verwenden von Instanzblöcken im Bereich.
Siehe auch:
In A
haben Sie einen Instanzinitialisierer. Es wird jedes Mal ausgeführt, wenn Sie eine neue Instanz von A
erstellen.
Wenn mehrere Threads A
Instanzen erstellen, würde dieser Code brechen. Und selbst in einem einzelnen Thread möchten Sie normalerweise nicht, dass eine einzelne Instanz den Zustand ändert, der von jeder Instanz gemeinsam genutzt wird. Aber wenn Sie es getan haben, ist dies ein Weg, um es zu erreichen.
Tags und Links java