Java Referenz und Instanz

Status
Für weitere Antworten geschlossen.

hookzie

Newbie
Registriert
Dez. 2015
Beiträge
2
Hey Leute,

Ich versuche momentan den Unterschied zwischen Instanzen und Referenzen zu lernen, dazu hab ich halt folgende Aufgabe bekommen:


Shape myShape = new Shape ("schwarz", 1,1,1);
IO.println (myShape);

myShape = new Sphere ("schwarz", 1,0,3,5);
IO.println (myShape);

IO.println (myShape.getRadius());


Ich soll halt das Verhalten eines Java Programms erklären wenn der Programmcode ausgeführt wird und dabei zwischen Referenz und Insanz unterscheiden. (Parameter sind nur Beispiele).

Ist das denn jetzt richtig das halt myShape jetzt eine Referenz der Art Shape ist die halt auf die Instanz der Klasse Shape verweist. die 2 Zeile dann ist, dass myshape eine Referenz verweist nach der Sphere und die zeigen insgesamt auf die Instanz Klasse Shape ?? oder komm ich da durcheinander oder verstehe da was falsch?
 
ich versuchs mal... keine garantie ;-)

Code:
Shape myShape = new Shape ("schwarz", 1,1,1);
IO.println (myShape);

myShape = new Sphere ("schwarz", 1,0,3,5);
IO.println (myShape);

IO.println (myShape.getRadius());

Zeile 1:
new Shape erstellt dir eine neue Instanz der Klasse Shape.
myShape ist eine Referenz auf diese Instanz.

Zeile 4:
new Sphere erstellt dir eine neue Instanz der Klasse Sphere. Diese Klasse erbt vermutlich von Shape.
myShape zeigt jetzt auf diese neue Instanz.
Der garbage collector räumt die in Zeile 1 erstellte Instanz von der Klasse Shape weg, da keine Referenz mehr auf sie existiert.
 
Das Heißt das halt ab Zeile 4 myShape halt auf die Instanz der Klasse Sphere Zeigt und die sozusagen nicht mehr auf Shape zeigt und diese wird dadurch ausgelassen und wird halt nicht mehr benötigt oder genutzt?
 
Shape myShape = new Shape ("schwarz", 1,1,1); // hier steht die Referenz (Speicheradresse) drin, diese Zeigt auf das im Heapspeicher liegende instanzierte Objekt.


myShape = new Sphere ("schwarz", 1,0,3,5); // hier wird nun der "Variable" eine neue Speicheradresse zugewiesen, diese Referenz zeigt nun auf das neue Objekt "new Sphere"
Ergänzung ()

hookzie schrieb:
Das Heißt das halt ab Zeile 4 myShape halt auf die Instanz der Klasse Sphere Zeigt und die sozusagen nicht mehr auf Shape zeigt und diese wird dadurch ausgelassen und wird halt nicht mehr benötigt oder genutzt?

Wenn es für ein Objekt (Instanz) keine Refernz mehr gibt, wird diese wie aroxx schon sagte aus dem Speicher entfernt.

in Zeile 4 wird die Refernz (Speicheradresse) von Zeile 1 überschrieben und das Objekt aus Zeile 1 wird freigegeben (aus dem Speicher entfernt)
 
Zuletzt bearbeitet:
Pille1002 schrieb:
in Zeile 4 wird die Refernz (Speicheradresse) von Zeile 1 überschrieben und das Objekt aus Zeile 1 wird freigegeben (aus dem Speicher entfernt)

Das klingt so, als würde das Freigeben sofort passieren. Der Zeitpunkt hierfür ist aber unbestimmt... vielleicht passiert es relativ zügig, vielleicht aber auch erst, wenn das Programm beendet wird.
 
Das hier, hat immer noch Gültigkeit.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben