Vorwort
Heute, als ich Android ContentProvider -Implementierung ansah, dachte ich plötzlich an die Ausführungsreihenfolge statischer Domänen, statischer Blöcke, nicht -statischen Blöcke, nicht -statischen Blöcke und konstruktiven Funktionen während des neuen Prozesses der Java -Klasse. Tatsächlich ist dies ein sehr klassisches Thema, das sehr untersucht wird, um das Grundwissen von Java zu erfassen. Ich glaube, es gibt auch solche Probleme während des Interviewprozesses und nutzen die Zeit, um es am Wochenende zu überprüfen.
abschließend
Hier ist die Sortierschließung für alle, und dann schreibe ich ein Programm, um unsere Schlussfolgerungen zu überprüfen. Während der neuesten Java -Klasse lautet die Ausführungsreihenfolge wie folgt:
Bei der Implementierung der Erbschaftsklasse lautet die Initialisierungsausführungsreihenfolge wie folgt:
Hier müssen Sie statische Codeblöcke und nicht -statische Codeblöcke einführen.
1. statischer Codeblock:
statisch {
}
2. Nicht -statischer Codeblock
{{{{
}
Die Ähnlichkeiten und Unterschiede zwischen statischen Codeblöcken und nicht -statischen Codeblöcken sind wie folgt:
Die beste Überprüfung der Überprüfung der Schlussfolgerung besteht darin, den Code zu schreiben, um die Ergebnisse zu beweisen. Schauen wir uns zunächst die Reihenfolge der Ausführung an, wenn die Erbschaftsklasse initialisiert.
Public class initoderest {public static static_field = "statische Eigenschaften"; -Statische Eigenschaften "; // nicht -statische Blöcke {System.out.println (Feld); System.out.println (" Nicht -statischer Codeblock ");} public initoToTest () {System.out.println);};}; Public static void main (String [] args) {initodrTest test = new initoToTest ();}} Ausführungsergebnisse:
Überprüfen Sie als nächstes, dass die Ausführungsreihenfolge, wenn die Java -Klasse geerbt wird, mit unseren Schlussfolgerungen übereinstimmt. Der Testcode lautet wie folgt:
Klasse Elterntest {public String melded_static_field = "Parent-statische Eigenschaften"; String ParentField = "Family Class-Non-Static Attribute"; PareattTest () {System.out.println ("familie -öffentliche Klasse InitoDerTest erweitert Paratttest {public station static_field =" static matricnut "; // static block static {System.out .println (static_field); System.out.println (" Statischer Code -Block ");} public String field =" Nicht -statische Eigenschaften "; // nicht -statischer Block {System.out.println (Feld); System.out.pr. Intln (" Nicht -statischer Code -Block ") } Public initoToTest () {System.out.println ("portomless Constructor");Die Ausführungsergebnisse sind wie folgt: