Ich habe Code, den ich nicht verstehen kann, wie er diese Ausgabe erzeugt. Hier ist der Code unten -
r1 r4 pre b1 b2 r3 r2 hawk
Meine spezifischen Fragen zu diesem Code sind -
Hawk
class instationiert ist, bewirkt dies, dass Raptor
class instationiert wird und daher der statische Codeblock zuerst ausgeführt wird. Auf statischen Code sollten dann vor dem Drucken von pre
nicht statische Werte folgen. Ist es nicht? Auf den statischen Code sollten vor dem Drucken vor dem statischen Code nicht statische folgen. Ist es nicht?
Hawk.main
löst die Initialisierung aller drei Klassen aus. Dies ist, wenn die statischen Initialisierer laufen; pre
wird gedruckt; new Hawk()
löst die Ausführung von Instanzinitialisierungen für alle drei Klassen aus. können diese als Konstruktoren in der regulären Programmierung verwendet werden?
Sie werden zusammen mit Code aus Konstruktoren in <init>
Methoden kompiliert. Also, sie sind ähnlich dem Konstruktorcode. Der Hauptunterschied besteht darin, dass sie unabhängig davon ausgeführt werden, welcher Konstruktor ausgeführt wird, und vor dem Konstruktorhauptteil ausgeführt werden.
Die Blöcke static
werden ausgeführt, wenn die Klasse geladen wird. Daher werden sie ausgeführt, bevor Ihre Methode main()
ausgeführt wird.
Die Initialisierungsblöcke werden vor den Konstruktoren ausgeführt. Der Unterschied zwischen einem Konstruktor und einem Initialisierungsblock besteht darin, dass ein Konstruktor Parameter haben kann.
Beachten Sie auch, dass die Initialisierungsblöcke und Konstruktoren zuerst in der Basisklasse und danach in der Unterklasse ausgeführt werden.
1 - Der Pre wird zuerst gedruckt, weil Sie Hawk nur dann erstellen, wenn Sie den neuen Hawk () ausführen, bis zu diesem Moment werden nur statische Initialisierer ausgeführt.
2 - Nicht-statische Initialisierung wird normalerweise angewendet, um Werte von Variablen zu initialisieren, aber da Sie keine Parameter an sie übergeben können, werden Sie wahrscheinlich im Vergleich zu Konstruktoren dasselbe erreichen. In diesen Blöcken können Sie Ihre Attribute auf konstante Werte oder leere Werte initialisieren.
Das Java-Tutorials-Dokument finden Sie im Detail.
Tags und Links java constructor initialization