1: Einige Formulierungen: Wir instanziieren überhaupt keine Objekte, wir instanziieren Klassen und das Produkt einer Klasseninstanziierung ist ein Objekt (auch als Instanz bezeichnet). Natürlich können wir eine Klasse so oft instanziieren, wie erforderlich, um mit jeder Instanziierung ein neues und anderes Objekt zu erstellen.
2: Wie auch immer, Sie können den von Ihnen vorgeschlagenen Code nicht haben:
Test test = new Test();
Test test = new Test();
Sie können dies auch nicht haben:
for (i=0; i<3; i++) {
Test test = new Test();
Test test = new Test();
}
Keiner wird kompiliert, da der Teil Test test
die Deklaration einer Variablen test
(vom Typ Test
) ist und keine Sprache, einschließlich Java, die Deklaration der gleichen Variablen im selben Bereich ermöglicht.
Sie können jedoch dieselbe Variable (wie der Name schon sagt) mehrfach mit unterschiedlichen Objekten wie folgt zuweisen:
Test test = new Test();
test = new Test();
In der ersten Zeile test
wird ein neu erstelltes Objekt deklariert und zugewiesen. Die zweite Zeile wird einem test
anderen Objekt zugewiesen , das ebenfalls neu erstellt wurde.
Beachten Sie auch, dass Verknüpfungen in Java zulässig sind:
for (i=0; i<3; i++) {
Test test = new Test();
}
Diese Schleife wird nicht test
dreimal deklariert . Es versteht sich, der Variablen drei neue verschiedene Objekte nacheinander zuzuweisen, test
die nur einmal deklariert werden. (Vergleiche mit der vorherigen Schleife).
3: Was passiert mit der Variablen test
und den beiden Typobjekten Test
?
Der Variablen test
wird zuerst die Referenz eines Objekts und dann eines anderen Objekts zugewiesen. Eine Variable behält nur die zuletzt zugewiesene Referenz bei.
Das erste Objekt des Typs Test
ist nicht test
mehr zugeordnet. Wenn keiner anderen Variablen ihre Referenz zugewiesen wurde, kann das Programm in keiner Weise auf dieses Objekt zugreifen und ist daher unbrauchbar. Es wird vom System zur Speicherbereinigung berechtigt. Irgendwann wird das System (die JVM) seinen Garbage Collector ausführen, wodurch er aus dem Speicher gelöscht wird.
Das zweite Objekt wird so lange leben, wie mindestens eine Variable darauf verweist. Der Garbage Collector kümmert sich ebenfalls darum und bringt es zum Friedhof für nicht referenzierte Objekte. Das ist das wahre Leben von Java-Objekten :-(