Dieser Artikel stellt hauptsächlich das relevante Wissen über den Umfang von Java-Variablen und Objekten vor. Es hat einen sehr guten Referenzwert, schauen wir es uns mit dem Editor unten an
Die meisten Programmiersprachen bieten das Konzept „Scope“.
Für einen in einem Bereich definierten Namen bestimmt der Bereich sowohl seine „Sichtbarkeit“ als auch seinen „Zeitpunkt der Existenz“. In C, C++ und Java wird der Umfang durch die Position der geschweiften Klammern bestimmt.
Beispiel:
{ int x = 12; /* only x available */ { int q = 96; /* both x & q available */ } /* only x available */ /* q “out of scope” */ }
Java verwendet ein Klammerpaar als Gültigkeitsbereich einer Anweisung Block wird als Bereich bezeichnet und kann als im Bereich definierte Variable nur verwendet werden, bevor der Bereich endet.
Sie können in Java keinen Code wie den folgenden schreiben:
{ int x = 12; { int x = 96; /* illegal */ } }
Der Java-Compiler geht davon aus, dass die Variable definiert wurde, sodass die Variable im Bereich nicht wiederholt definiert werden kann, sondern in C und C++ Die Möglichkeit, eine Variable in einem größeren Bereich zu „verstecken“, ist in C und C++ erlaubt, nicht jedoch in Java, da die Java-Designer glauben, dass dies das Programm verwirrt.
Schauen wir uns noch zwei weitere Beispiele an, damit jeder den Effekt sehen kann:
①
②
Schauen wir uns diesen Code noch einmal an. Was sind die Verhaltensweisen der Zeilen 11 und 12, die keine Grammatikfehler sind<🎜? >? Der Code lautet wie folgt:
Wenn wir die Positionen tauschen, lautet der Code wie folgt:
Nach dem Verlassen des Bereichs wird der von der Variablen zugewiesene Speicherplatz von der JVM zurückgefordert, sodass keine Syntaxfehler auftreten. Die zweite Schreibweise des Namens verlässt jedoch nicht den Bereich {}. Es kommt also zu Syntaxfehlern.
Die oben genannten Variablen sind alle lokale Variablen. Was passiert also, wenn es globale Variablen gibt? Lassen Sie uns im Code sprechen. Der Code lautet wie folgt:
Wenn Sie den Code sorgfältig beobachten und darüber nachdenken, können Sie die folgende Schlussfolgerung über den Umfang der Variablen ziehen:
in Der globale
Variablennameund der lokale Variablenname können denselben Variablennamen unter demselben Bereichspaket haben. Die lokale Variable und die lokale Variable unter demselben Bereichspaket können nicht dieselbe Variable haben Name (nicht innerhalb des Gültigkeitsbereichs). Wenn Sie bei Verwendung einer Variablen nicht angeben, ob eine globale Variable oder eine lokale Variable verwendet werden soll, wird standardmäßig die lokale Variable verwendet Wenn Sie einen eigenen Bereich haben, wird er ungültig und von der JVM als Garbage Collection erfasst. Anschließend können Sie diese Variable umbenennen und die zuletzt definierte lokale Variable verwenden.
Der Umfang des ObjektsJava-Objekte haben nicht die gleiche Existenzzeit wie Zhu-Typen. Wenn Sie ein Java-Objekt mit dem Schlüsselwort
newerstellen, verlässt es den Gültigkeitsbereich. Wenn Sie also den folgenden Code verwenden:
, dann verschwindet das Handle s, also die{ String s = new String("a string"); } /* 作用域的终点 */
, am Ende des Gültigkeitsbereichs. Das String-Objekt, auf das s zeigt, belegt jedoch immer noch Speicherplatz. Im obigen Code haben wir keine Möglichkeit, dieses Objekt weiter zu verwenden, da das einzige darauf verweisende Handle die Grenzen des Gültigkeitsbereichs überschritten hat. Das Ergebnis davon ist: Objekte, die mit new erstellt wurden, bleiben so lange erhalten, wie wir möchten. Dieses
Programmierproblem tritt besonders in C und C++ auf. Das größte Problem liegt in C++: Da Sie von der Sprache keine Hilfe erhalten, können Sie nicht sicher sein, ob Objekte verfügbar sind, wenn Sie sie benötigen. Und das Schlimmste ist, dass in C++ das Objekt nach Abschluss der Arbeit manuell gelöscht werden muss. Das wirft eine interessante Frage auf. Wenn Java zulässt, dass Objekte gleich bleiben, wie können wir dann verhindern, dass sie den Speicher füllen und schließlich zum „Einfrieren“ des Programms führen? In C++ bereitet dieses Problem Programmierern am meisten Kopfzerbrechen. Aber nach Java hat sich die Situation geändert. Java verfügt über einen speziellen „Garbage Collector“, der nach allen mit new erstellten Objekten sucht und erkennt, auf welche davon nicht mehr verwiesen wird. Anschließend gibt es automatisch den von diesen inaktiven Objekten belegten Speicher frei, sodass er von neuen Objekten verwendet werden kann. Das bedeutet, dass wir uns überhaupt keine Gedanken über die Wiederherstellung des Speichers machen müssen. Erstellen Sie einfach Objekte und sie verschwinden automatisch, sobald sie nicht mehr benötigt werden. Dies verhindert ein häufiges Programmierproblem in C++: „Speicherüberlauf“, der dadurch verursacht wird, dass der Programmierer vergisst, Speicher freizugeben.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Umfangs von Java-Variablen und -Objekten (Bild und Text). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!