# Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz



## Java4win (14. Jul 2017)

Hey, 
Ich habe die im Titel genannten Begriffe oder das was dahinter steckt beim programmieren bereits verwendet, jedoch möchte ich gerne verstehen was dabei im Computer abläuft. (Ich habe schon sehr viel Recherchiert, jedoch sehr viel unterschiedliches Gelesen, was mich verunsichert hat.) 

Falls etwas nicht stimmt Verbesserungen sind gerne gesehen. 

*Instanz und Instanzierung: *


```
public class Main{

public static void main (String[] args){

Objekt o = new Objekt();

}
}
```

So weit ich das nun verstanden habe ist dies oben eine Instanzierung und eine Instanz wird dabei erstellt.
*1.Frage: *Ist "o" die Instanz ? Oder hat die Instanz keinen Namen? 

*Referenz:*

An dem obigen Beispiel ist "o" ja nicht direkt die Instanz sondern verwendet lediglich eine Referenz (Referenz = Speicheradresse) *die auf ein Objekt oder auf eine Instanz verweist ? 

Objekte: 
*
Eine Klasse ist der Bauplan eines Objektes. Objekte werden im Heap gespeichert. *Aber wenn man nun eine Instanzierung durchführt, wird dann ein weiteres Objekt im Heap gespeichert oder eine weitere Instanz? Ist die Instanz evtl. ein Objekt mit veränderten Attributen? *

Ich habe auch schon mehrmals gelesen das *Instanz == Objekt(?)* ist. Jedoch wurde dies auch des öfteren widersprochen...

Ich hoffe ihr könnt mir etwas weiter helfen bei meinem kleinen Verständnis Problem. 

Besten Dank im Voraus!


----------



## JStein52 (15. Jul 2017)

```
new Objekt();
```
 erzeugt eine neue Instanz der Klasse Objekt und liefert eine Referenz darauf zurück die in o gespeichert wird. Du kannst ja mal 
	
	
	
	





```
System.out.println("Ist das eine Referenz? "+o);
```
 ausführen.
Und "Objekt" und "Instanz" sind synonym und es fällt mir auch gerade nichts ein was da nicht stimmen sollte.


----------



## Xyz1 (15. Jul 2017)

Heap(ing) vs Stack(ing) und JVM internals - das Thema könnte interessant werden.


----------



## Harry Kane (15. Jul 2017)

JStein52 hat gesagt.:


> Und "Objekt" und "Instanz" sind synonym und es fällt mir auch gerade nichts ein was da nicht stimmen sollte.


MMn sind Klassen auch Objekte.


----------



## JStein52 (15. Jul 2017)

Zitat:
Ein *Objekt* (auch Instanz genannt) bezeichnet in der objektorientierten Programmierung (OOP) ein Exemplar eines bestimmten Datentyps oder einer bestimmten Klasse (auch „Objekttyp“ genannt). *Objekte* sind konkrete Ausprägungen („Instanzen“) eines Objekttyps und werden während der Laufzeit erzeugt (Instanziierung).


----------



## Harry Kane (16. Jul 2017)

JStein52 hat gesagt.:


> Zitat


Woher stammt das Zitat?
Ich hatte mal irgendwo (wo, weiss ich leider nichtmehr), die Definition gefunden, dass ein "Objekt" einen inneren Zustand und Methoden besitzt. Das würde auch auf Klassen passen.
Die JLS (Kapitel 4.3.1) sagt dazu:
"An _object_ is a _class instance_ or an _array_." Von daher hast du wohl recht.


----------



## JStein52 (16. Jul 2017)

Ich hatte die erste deutschsprachige Beschreibung genommen die ich gefunden hatte, war aber glaube ich Wikipedia.
Gibts aber sinngemäss überall, z.B. so um auch nochmal auf Klasse einzugehen:
"Eine Klasse definiert einen neuen Typ, beschreibt die Eigenschaften der Objekte und gibt somit den Bauplan an. Jedes Objekt ist ein Exemplar (auch Instanz[90](Ich vermeide das Wort Instanz und verwende dafür durchgängig das Wort Exemplar. An die Stelle von instanziieren tritt das einfache Wort erzeugen. Instanz ist eine irreführende Übersetzung des englischen Ausdrucks »instance«.) oder Ausprägung genannt) einer Klasse."


----------



## Java4win (17. Jul 2017)

JStein52 hat gesagt.:


> die in o gespeichert wird.


Vielen Dank! 
Nun bleibt mir nur noch die Frage, wo genau "o" gespeichert wird, in der die Referenz abgespeichert wird.


----------



## JStein52 (17. Jul 2017)

Java4win hat gesagt.:


> wo genau "o" gespeichert wird


Wie meinst du das ? In welchem Teil der Galaxis oder wie ?


----------



## Java4win (17. Jul 2017)

JStein52 hat gesagt.:


> Wie meinst du das ?



Tut mir leid wenn ich mich nicht deutlich ausgedrückt habe. Es gibt ja verschiedene Arten von Speicher in dem PC (Heap, Steak...)

und wenn ich nun  eine Variable deklariere, in welchem Speicher wird diese nun gespeichert. 

Bsp:

```
int i;
Objekt o = new Objekt();
```

Wo werden die Variablen "i" und "o" abgespeichert? 

Ich hoffe man kann es jetzt etwas besser verstehen.


----------



## JStein52 (17. Jul 2017)

Ah ok. Die Antwort ist: kommt ganz drauf an.
Guck mal hier als Überblick:  http://www.journaldev.com/4098/java-heap-space-vs-stack-memory


----------



## JStein52 (17. Jul 2017)

Und wenn du etwas mehr Futter willst: http://www.fh-wedel.de/~si/seminare/ws07/Ausarbeitung/05.jvm/jvm2.htm


----------



## Java4win (17. Jul 2017)

Vielen Dank!
Die Seiten sehen sehr interessant aus!


----------



## Xyz1 (17. Jul 2017)

JStein52 hat gesagt.:


> Ich vermeide das Wort Instanz und verwende dafür durchgängig das Wort Exemplar. An die Stelle von instanziieren tritt das einfache Wort erzeugen.


Das ist die eigene subjektive persönliche Meinung, anstelledessen hätte er auch schreiben können: Heute scheint die Sonne / ist das Wetter schön, findest du nicht auch? Oder anders gesagt: Ich weiß, dass Instanz (auch Objekt synonym) sowie instantiieren (hier nen bissel auf die Schreibung achten) nicht falsch ist... sondern der adäquate Begriff.

Ich aber selber immer Erstellen schreiben.  Das ist für anfänger leichter zu verstehen.


----------



## VfL_Freak (17. Jul 2017)

Moin,


Java4win hat gesagt.:


> Wo werden die Variablen "i" und "o" abgespeichert?


Wenn Du sie so deklarierst im Speicher des Rechners ....

VG Klaus


----------

