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 testdie 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 testwird ein neu erstelltes Objekt deklariert und zugewiesen. Die zweite Zeile wird einem testanderen 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 testdreimal deklariert . Es versteht sich, der Variablen drei neue verschiedene Objekte nacheinander zuzuweisen, testdie nur einmal deklariert werden. (Vergleiche mit der vorherigen Schleife).
3: Was passiert mit der Variablen testund den beiden Typobjekten Test?
Der Variablen testwird 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 Testist nicht testmehr 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 :-(