Lassen Sie uns zunächst über das JVM-Speichermodell sprechen:
Der JVM-Speicher ist unterteilt in: Methodenbereich, Heap, Stapel und Programmzähler.
Lassen Sie uns kurz über den Methodenbereich, den Stapel und den Heap sprechen:
Methodenbereich: Dies ist ein von jedem Thread gemeinsam genutzter Bereich, in dem Klasseninformationen/Konstanten/statische Variablen gespeichert werden.
Stapel: Tatsächlich wird jedem Thread ein Stapel zugewiesen, und sein Lebenszyklus ist derselbe wie der des Threads. Beim Ausführen einer Methode wird ein Stapelrahmen generiert, der die lokalen Variablen in der Methode enthält.
Heap: Alle Klasseninstanziierungen werden im Heap gespeichert.
(Empfohlenes Video-Tutorial: Java-Video-Tutorial )
1. Analysieren Sie den Unterschied zwischen statisch und nicht statisch aus der Perspektive des Gedächtnisses
Statisch ändert Mitgliedsvariablen und Mitgliedsmethoden. Die Adresse, an der ihre Werte gespeichert werden, ist der Konstantenpool im Methodenbereich. Die Ausführungsreihenfolge besteht darin, die statisch geänderten Variablennamen oder Methoden im Konstantenpool zu speichern Laden der Klasse.
Nicht statisch geänderte Variablen können Mitgliedsvariablen und lokale Variablen sein.
Die Mitgliedsvariable ist dieselbe wie die Adresse, an der das Objekt gespeichert ist, da es Teil der Klasse ist und sich seine Adresse im Heap befindet.
Lokale Variablen werden im Allgemeinen in Methoden deklariert und ihre gespeicherten Adressen befinden sich auf dem Stapel.
2. Analyse aus dem laufenden Mechanismus
Wenn der Quellcode vom Compiler in eine .class-Bytecode-Datei kompiliert wird, wird er nach dem Laden der Klasse geändert mit static Die Blöcke/Variablen/Methoden werden sofort im Methodenbereich gespeichert. Gleichzeitig wurden die nicht statischen Blöcke/Variablen/Methoden noch nicht kompiliert. Der Programmzähler zeigt die lokalen Variablen an. Es wird ein Fehler gemeldet, da die lokalen Variablen zu diesem Zeitpunkt noch nicht kompiliert wurden.
Empfohlenes Tutorial: Java-Einführungsprogramm
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen statisch und nicht statisch in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!