Klassenbelastung
Bevor wir über die Klasseninitialisierung sprechen, erläutern wir die Ladereihenfolge der Klasse.
Das Folgende ist aus "Denken in Java 4" auszuziehen
Da alles in Java ein Objekt ist, viele Aktivitäten
Dieses Problem ist eines der einfacheren Beispiele. Wie im nächsten Kapitel erwähnt wird, existiert der Code für jedes Objekt in einer separaten Datei. Wenn Code nicht wirklich benötigt wird, wird diese Datei nicht geladen. Im Allgemeinen können wir denken, dass der Code nicht tatsächlich geladen wird, es sei denn, ein Objekt dieser Klasse ist konstruiert. Da die statische Methode eine subtile Unklarheit gibt, kann auch berücksichtigt werden, dass "Klassencode geladen wird, wenn sie erstmals verwendet wird".
Wenn Sie es zum ersten Mal verwenden, tritt auch die statische Initialisierung auf. Beim Laden werden alle statischen Objekte und statischen Codeblöcke in ihrer ursprünglichen Reihenfolge initialisiert (dh der Reihenfolge, in der sie im Klassendefinitionscode geschrieben sind). Natürlich werden die statischen Daten nur einmal initialisiert.
Einfach ausgedrückt, wenn die Klasse eine Vererbungsbeziehung hat, formt der Klassenlader sie rückwärts und lädt zugehörige Klassen.
Zum Beispiel:
Klasse B erweitert die Klasse A, wenn wir neu B () sind, der Klassenlader lädt automatisch den Code von a
Initialisierungsreihenfolge der Klasse
Normalerweise lautet die Initialisierungssequenz wie folgt:
(statischer Objekt und statischer Codeblock, in ihrer Reihenfolge initialisiert)> Mitgliedsvariablen> Konstruktor
Testcode
public class classInit { / ** * @title: main * @Description: Klasseninitialisierungsauftragstest * @param: @param args * @return: void * @throw * / public static void main (String [] args) {// todo auto-generierte Methode stur }} Klasse A {static {System.out.println ("A's statischer Codeblock ..."); } public String s1 = prtstring ("A -Mitgliedsvariable ..."); public statische Zeichenfolge S2 = prtstring ("A's statische Variable ..."); public a () {System.out.println ("A's Constructor ..."); } public static String prtstring (String str) {System.out.println (str); null zurückkehren; }} Klasse B erweitert einen {public String ss1 = prtstring ("Bs Mitgliedsvariable ..."); öffentliche statische String SS2 = prtstring ("Bs statische Variable ..."); public b () {System.out.println ("Bs Konstruktor ..."); } private static a a = new a (); static {System.out.println ("Bs statischer Codeblock ..."); } {System.out.println ("Code Block ..."); }} Testergebnisse
A's statischer Codeblock ...
A's statische Variable ...
Bs statische Variable ...
Mitgliedsvariablen eines ...
A's Konstruktor ...
Bs statischer Codeblock ...
Mitgliedsvariablen eines ...
A's Konstruktor ...
Mitgliedsvariablen von B ...
Codeblock ...
Der Konstruktor von B ...
Zusammenfassen
Das obige ist der gesamte Inhalt der Initialisierungsreihenfolge der Klasse in Java. Ich hoffe, es wird für alle hilfreich sein, die Java benutzen.