Die Reihenfolge des Ladens von Klassendateien
1. Laden Sie zuerst die statischen Variablen und statischen Initialisierungsblöcke der übergeordneten Klasse (die Ausführungsreihenfolge ist in der Reihenfolge angeordnet).
2. Laden Sie die statischen Variablen und statischen Initialisierungsblöcke neu, die diese Klasse ausführen
Solange die Klasse nicht zerstört wird, werden die statischen Variablen und der statische Initialisierungsblock nur einmal ausgeführt, und diese beiden Schritte werden im anschließenden Betrieb der Klasse nicht weiter durchgeführt.
Erstellung von Klasseninstanzen
Eine Instanz der Klasse wird nur erstellt, wenn die neue Methode aufgerufen wird.
1. In der Reihenfolge des Ladens der obigen Klassendatei (überspringen Sie diesen Schritt, wenn die Klasse geladen wurde)
2. Nichtstatische Variablen und nicht statische Initialisierungsblöcke der übergeordneten Klasse
3. Die Konstruktionsmethode der übergeordneten Klasse
4. Nichtstatische Variablen und nicht statische Initialisierungsblöcke dieser Klasse
5. Die Baumethode dieser Klasse
4. Wenn Sie eine Klasseninstanz zerstören, zerstören Sie zuerst den Teil der Unterklasse und zerstören Sie dann den Teil der Elternklassen.
Sowohl statische als auch nicht statische Methoden werden passiv aufgerufen
Das heißt, das System ruft nicht automatisch an und führt nicht aus. Daher führt der Benutzer es nicht aus, wenn er nicht aufgerufen wird. Der Hauptunterschied besteht darin, dass statische Methoden direkt mit dem Klassennamen aufgerufen werden können (und Instanziierungsobjekte auch durchgeführt werden können), während nicht statische Methoden nur nach dem Instanziieren des Objekts aufgerufen werden können.
Verwandte Konzepte
Statisches Schlüsselwort:
ist ein Modifikator, mit dem Mitglieder geändert werden (Mitgliedervariablen und Mitgliederfunktionen)
Die modifizierten Mitglieder haben die folgenden Eigenschaften:
Laden Sie die Klasse, wenn die Klasse geladen ist (sobald die Klasse geladen ist, lädt die statischen Daten den Speicherplatz sofort im Speicher)
Verschwindet, wenn die Klasse verschwindet, was darauf hinweist, dass sie den längsten Lebenszyklus hat
Vorzugsübergreifend über die Existenz von Objekten (Objekt verschwindet, statisch ist immer noch da)
Statische Existenz zuerst existiert das Objekt später
Von allen Objekten geteilt
Speicherplatz speichern
Wenn ein Mitglied statisch geändert wird, kann es neben dem Objekt zusätzlich zum Aufruf von Klassennamen auch direkt aufgerufen werden.
Schreiben: Klassenname. Statisches Mitglied
Anmerkungen zur Verwendung
Statische Methoden können nur auf statische Mitglieder zugreifen (Methoden und Variablen)
Nichtstatische Methoden können sowohl auf statische als auch nicht statische Zugriffe zugreifen
Dies und Super -Keywords können nicht in statischen Methoden geschrieben werden
Da statische Vorrang vor dem Objekt nicht in statischen Methoden erscheinen kann
Die Hauptfunktion ist statisch
publicStaticVoidMain (String [] args) {}
Wann kann man statisch verwenden?
Wir müssen von zwei Aspekten ausgehen: weil der Inhalt der statischen Änderung Mitgliedsvariablen und Funktionen enthält.
Wann definieren Sie eine statische Variable (Klassenvariable)
Wenn gemeinsame Daten im Objekt angezeigt werden, werden die Daten statisch geändert. Die eindeutigen Daten im Objekt sollten als nicht statisch im Heap-Speicher vorhanden sein.
Wann soll eine statische Funktion definiert werden
Wenn auf nicht statische Daten (objektspezifische Daten) nicht intern zugegriffen werden, kann die Funktion als statisch definiert werden.
Statische Vor- und Nachteile
profitieren:
1. Speichern Sie gemeinsam genutzte Daten in separaten Räumen für Objekte und speichern Platz. Es ist nicht erforderlich, eine Kopie jedes Objekts zu speichern.
2. kann direkt mit Klassennamen aufgerufen werden
Nachteile:
1. Lebenszyklus ist zu lang
2. Zugriffsbeschränkungen treten auf (nur statischer Zugang)
Speicherstruktur
Wenn Java -Programme ausgeführt werden, müssen sie Speicherplatz im Speicher zuweisen. Um die Recheneffizienz zu verbessern, wurden verschiedene Bereiche des Raums unterteilt, da jeder Bereich eine spezifische Datenverarbeitungsmethode und Speicherverwaltungsmethode aufweist.
Stapelspeicher
Wird verwendet, um lokale Variablen zu speichern, wenn die Daten verwendet werden, der belegte Raum wird automatisch freigegeben.
Haufen Speicher
Arrays und Objekte (Entitäten), Instanzen, die durch Neue erstellt wurden, werden im Heap -Speicher gespeichert (Mitgliedsvariablen werden mit der Festlegung des Objekts festgelegt und existieren im Heap -Speicher, in dem sich das Objekt befindet). Jede Entität hat einen Speicheradressenwert (Variablen werden von der Adresse verwiesen). Variablen in der Entität haben Standardinitialisierungswerte. Die Entität wird nicht mehr verwendet und wird vom Müllsammler innerhalb einer unsicheren Zeit recycelt (Mechanismus für Müllsammlung).
Methodenbereich, lokaler Methodenbereich, Register
verifizieren
| Ladereihenfolge | Statische Variable der Elternklasse = 1 | Nichtstatische Variable der Elternklasse = 1 | Statische Variable der Unterklasse = 1 | Subklasse nicht statische Variable = 1 |
|---|---|---|---|---|
| [Die übergeordnete Klasse ruft die statische Methode der übergeordneten Klasse auf] | Parent.pstaticMethod (); | |||
| Statische Initialisierung der Elternklasse eins eins | 2 | |||
| Statische Initialisierungsklasse der Elternklasse zwei | 3 | |||
| Statische Methode der Elternklasse | 4 | |||
| [Unterklasse ruft die statischen Methoden von Unterklassen auf] | Child.CstaticMethod (); | |||
| Statische Initialisierungsblock der Unterklasse eins | 5 | 2 | ||
| Statische Initialisierung der Unterklasse zwei | 6 | 3 | ||
| Statische Unterklasse -Methoden | 7 | 4 | ||
| 【Unterklasse -Instanziierung】 | Kind c = neues Kind (); | |||
| Die übergeordnete Klasse ist nicht statischer Initialisierungsblock 1 | 8 | 2 | ||
| Die nicht statische Initialisierungsklasse der Elternklasse blockiert zwei | 9 | 3 | ||
| Elternklassenkonstruktor | 10 | 4 | ||
| Unterklasse Nichtstatischer Initialisierungsblock 1 | 11 | 5 | 5 | 2 |
| Subklasse Nichtstatische Initialisierungsblock zwei | 12 | 6 | 6 | 3 |
| Unterklasse -Konstruktionsmethode | 13 | 7 | 7 | 4 |
| 【Übergeordnete Klasse Instantiates Subcass -Objekt】】 | Eltern p = neues Kind (); | |||
| Die übergeordnete Klasse ist nicht statischer Initialisierungsblock 1 | 14 | 2 | ||
| Die nicht statische Initialisierungsklasse der Elternklasse blockiert zwei | 15 | 3 | ||
| Elternklassenkonstruktor | 16 | 4 | ||
| Unterklasse Nichtstatischer Initialisierungsblock 1 | 17 | 5 | 8 | 2 |
| Subklasse Nichtstatische Initialisierungsblock zwei | 18 | 6 | 9 | 3 |
| Unterklasse -Konstruktionsmethode | 19 | 7 | 10 | 4 |
| Ladereihenfolge | Statische Variable der Elternklasse = 1 | Nichtstatische Variable der Elternklasse = 1 | Statische Variable der Unterklasse = 1 | Subklasse nicht statische Variable = 1 |
|---|---|---|---|---|
| 【Unterklasse -Instanziierung】 | Kind c = neues Kind (); | |||
| Statische Initialisierung der Elternklasse eins eins | 2 | |||
| Statische Initialisierungsklasse der Elternklasse zwei | 3 | |||
| Statische Initialisierungsblock der Unterklasse eins | 4 | 2 | ||
| Statische Initialisierung der Unterklasse zwei | 5 | 3 | ||
| Die übergeordnete Klasse ist nicht statischer Initialisierungsblock 1 | 6 | 2 | ||
| Die nicht statische Initialisierungsklasse der Elternklasse blockiert zwei | 7 | 3 | ||
| Elternklassenkonstruktor | 8 | 4 | ||
| Unterklasse Nichtstatischer Initialisierungsblock 1 | 9 | 5 | 4 | 2 |
| Subklasse Nichtstatische Initialisierungsblock zwei | 10 | 6 | 5 | 3 |
| Unterklasse -Konstruktionsmethode | 11 | 7 | 6 | 4 |
| 【Übergeordnete Klasse Instantiates Subcass -Objekt】】 | Eltern p = neues Kind (); | |||
| Die übergeordnete Klasse ist nicht statischer Initialisierungsblock 1 | 12 | 2 | ||
| Die nicht statische Initialisierungsklasse der Elternklasse blockiert zwei | 13 | 3 | ||
| Elternklassenkonstruktor | 14 | 4 | ||
| Unterklasse Nichtstatischer Initialisierungsblock 1 | 15 | 5 | 7 | 2 |
| Subklasse Nichtstatische Initialisierungsblock zwei | 16 | 6 | 8 | 3 |
| Unterklasse -Konstruktionsmethode | 17 | 7 | 9 | 4 |
| [Die übergeordnete Klasse ruft die statische Methode der übergeordneten Klasse auf] | Parent.pstaticMethod (); | |||
| Statische Methode der Elternklasse | 18 | |||
| [Unterklasse ruft die statischen Methoden von Unterklassen auf] | Child.CstaticMethod (); | |||
| Statische Unterklasse -Methoden | 19 | 10 |
public class classtest {public static void main (String args []) {System.out.println ("【Unterklasse Instanziation】 | child c = new Child ();"); Kind c = neues Kind (); System.out.println ("【Premium -Klasse Instantiates Subcass -Objekt】 | Eltern p = new Child ();"); Eltern p = neues Kind (); System.out.println ("[Premium -Klasse ruft die übergeordnete Klasse statische Methode auf] | parent.pstaticMethod ();"); Parent.pstaticMethod (); System.out.println ("[Unterklasse ruft die statische Methode von Unterklassen auf] | child.cstaticMethod ();"); Child.CstaticMethod (); }} public class clasStest2 {public static void main (String args []) {System.out.println ("[Vorsitzende Klassen- und übergeordnete Klasse statische Methode] | parent.pstaticMethod ();"); Parent.pstaticMethod (); System.out.println ("[Subklasse -Aufruf -Subklasse statische Methode] | child.cstaticMethod ();"); Child.CstaticMethod (); System.out.println ("[Instanziierung der Unterklasse] | Kind c = new Child ();"); Kind c = neues Kind (); System.out.println ("【Elternklasse Instantiates Child Class -Objekt】 | Eltern p = new Child ();"); Eltern p = neues Kind (); }} öffentliche Klasse Eltern {// Elternklasse statische Variable statische int m = 1; // übergeordnete Klasse nicht statische Variable int n = 1; // statische Anweisung Block 1 static {m ++; // J ++; Nicht-statische Variable der Elternklasse kann im statischen Anweisung Block System.out.println nicht verwendet werden ("Vorbereitungsklasse statischer Initialisierungsblock 1 |" + m); } // statische Anweisung Block 2 static {m ++; System.out.println ("statische Initialisierungsblock der Vorbereitungsklasse 2 |" + m); } // Constructor public Parent () {m ++; n ++; System.out.println ("Vorbereitungsklassenkonstruktor |" + m + "|" + n); } // Nichtstatische Anweisung Block {m ++; n ++; System.out.println ("Vorsitzende Klasse Nicht-statische Initialisierungsblock 1 |" + m + "|" + n); } // Nichtstatische Anweisung Block {m ++; n ++; System.out.println ("Vorsitzende Klasse Nichtstatischer Initialisierungsblock 2 |" + m + "|" + n); } // Nichtstatische Methode public void pmethod () {m ++; n ++; System.out.println ("Vorsitzende Klasse nicht statische Methode |" + m + "|" + n); zurückkehren; } // statische Methode public static void pstaticMethod () {m ++; // j ++; Die nicht statische Variable der Elternklasse kann nicht im statischen Methodensystem verwendet werden. zurückkehren; } @Override protected void enddefination () löscht Throwable {Super.finalize (); System.out.println ("Zerstören Sie die übergeordnete Klasse |"); }} öffentliches Klasse Child erweitert übergeordnete {// statische Variable statische int i = 1; // nicht statische Variable int j = 1; // statische Anweisung Block 1 static {m ++; i ++; // J ++; Nichtstatische Variablen können im statischen Anweisung Block System.out.println nicht verwendet werden ("Subklasse statischer Initialisierungsblock 1" + "|" + m + "||" + i); } // statische Anweisung Block 2 static {m ++; i ++; System.out.println ("Subklasse statische Initialisierungsblock 2" + "|" + m + "||" + i); } // Constructor public child () {m ++; n ++; i ++; J ++; System.out.println ("Subklassenkonstruktor" + "|" + m + "|" + n + "|" + i + "|" + j); } // Nichtstatische Anweisung Block {m ++; n ++; i ++; J ++; System.out.println ("Subklasse Nicht-statische Initialisierung blockieren" + "|" + m + "|" + n + "|" + i + "|" + j); } // Nichtstatische Anweisung Block {m ++; n ++; i ++; J ++; System.out.println ("Subklasse Nicht-statische Initialisierungsblock zwei" + "|" + m + "|" + n + "|" + i + "|" + j); } // Nichtstatische Methode public void pmethod () {m ++; n ++; i ++; J ++; System.out.println ("Unterklasse erbt nicht statische Methoden" + "|" + m + "|" + n + "|" + i + "|" + j); zurückkehren; } // statische Methode public static void pstaticMethod () {// statische Methode kann nicht vererbt werden m ++; i ++; // J ++; Nichtstatische Variablen können nicht in statischen Methoden verwendet werden. } // Nichtstatische Methode public void cMethod () {m ++; n ++; i ++; J ++; System.out.println ("Subklasse nicht statische Methode" + "|" + m + "|" + n + "|" + i + "|" + j); zurückkehren; } // statische Methode public static void cstaticMethod () {m ++; i ++; // J ++; Nichtstatische Variablen können nicht im statischen Methodensystem verwendet werden. zurückkehren; } @Override protected void enddefination () löscht Throwable {Super.finalize (); System.out.println ("Unterklasse zerstören |"); }}Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über die umfassende Analyse des Klassenbelastungsprozesses in Java. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, können Sie jederzeit eine Nachricht hinterlassen, und der Editor antwortet jedem rechtzeitig. Ich freue mich auf Ihre wertvollen Kommentare.