Dies ist tatsächlich eine schriftliche Testfrage von Alibaba, die ich während der Campus -Rekrutierung im letzten Jahr begegnet bin (ich gebe zu, dass es vor langer Zeit ist. Die Frage ist natürlich nicht so einfach. Out.println verursacht die endgültige Ausgabe des Programms.
Ich kann mich definitiv an die spezifischen Fragen erinnern, aber wir können die direkte Frage ändern. , Klasse A erbt gleichzeitig Klasse B.
Ich war damals auch verwirrt, also schrieb ich selbst eine kleine Demo, und dann erkannte ich das tatsächliche Laden in der Klasse.
Klasse B:
public class b {// statische Variable statische int i = 1; // statische Anweisung Block static {System.out.println ("Klasse B1: statische Blöcke"+i);} // nicht statische Variable int j = 1;//////////////// statische Anweisung Block static {i ++; System.out.println ("Klasse B2: statische Blöcke"+i);} // Konstruktor public b () {i ++; j ++; System.out.println ("Konstruktor B:"+" i = "+i+", j = "+J);} // Nichtstatische Anweisung Block {i ++; j ++; = "+j);} // Nicht-statische Methode public void bDisplay () {i ++; +j); return;} // statische Methode public static void bTest () {i ++; System.out.println ("Klasse B: static void bTest ():"+"i ="+i); return;}}
Klasse A:
öffentliche Klasse A erweitert B {// statische Variable statische int i = 1; // statische Anweisung Block static {System.out.println ("Klasse A1: statische Blöcke"+i);} // nicht statische Variable int j = 1; // statische Anweisung Block static {i ++; Konstruktor A: "+" i = "+i+", j = "+j);} // Nichtstatische Anweisung Block {i ++; j ++; System.out.println (" Klasse A: Common Blocks "+" i = "+i+", j = "+j);} // Nichtstatische Methode public void adisplay () {i ++; System.out.println (" Klasse A: statische void adisplay (): "+" i = "++++++++++++++++++++++++++++ i+", j ="+j); return;} // statische Methode public static void atest () {i ++; System.out.println ("Klasse A: statische void atest ():"+"i ="+i );zurückkehren ;}}Klassenbelastung:
öffentliche Klasse Class Loading {public static void main (String args []) {a = new a (); a.adisplay ();}}Die Programmläufergebnisse sind in der Abbildung dargestellt:
Durch das obige Diagramm können wir den gesamten Ladungsprozess der Java -Klasse deutlicher sehen.
1. So laden Sie die Klasse A, laden Sie zuerst die statischen Variablen, die seine übergeordnete Klasse B (Objekt) und den statischen Anweisungsblock ausführen (Ausführungsreihenfolge ist in der Reihenfolge angeordnet).
2. Laden Sie dann die statischen Variablen und statischen Anweisungsblöcke, in denen die Klasse A ausgeführt wird. A. (Und die Schritte 1 und 2 werden nur einmal durchgeführt)
3.. Wenn Sie die Klasse A der Klasse A instanziieren müssen, rufen Sie zunächst den Konstruktor seiner übergeordneten Klasse B auf. Bevor Sie den Konstruktor seiner übergeordneten Klasse B aufrufen Klasse B im Gegenzug.
4. Rufen Sie dann die nicht statischen Variablen und nicht statischen Anweisungen in der Klasse A auf. (Und Schritte 3 und 4 können wiederholt werden)
5. Sowohl statische als auch nicht statische Methoden werden passiv aufgerufen, dh das System wird nicht automatisch aufgerufen und ausgeführt, sodass der Benutzer nicht ausgeführt wird, wenn es nicht aufgerufen wird. Der Klassenname (Instanzobjekte können auch sein) und nicht statische Methoden können erst nach dem Instanziieren des Objekts aufgerufen werden.
OK, das ist alles für die heutige Zusammenfassung.