Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Konstruktoren dienen dazu Objekte zu initialisieren. Inwiefern werden sie denn initialisiert? Denn in Referenzvariablen wird der Rückgabewert von new hinterlegt, welcher festlegt, wo genau im Heap sich die Variable befindet. D.h das Objekt bekommt doch seinen Wert von new und nicht vom Konstruktor?
Ich meine nur wenn ich einen Konstruktor schreibe wie im folgenden Beispiel:
Java:
public class Punkt
{
public Punkt()
{
System.out.println("Hallo");
}
}
public class TestPunkt
{
public static void main(String[] args)
{
Punkt p = new Punkt();
}
}
Inwiefern habe ich denn durch den Konstruktor das Objekt initialisiert, wenn es doch gar keinen Wert zugewiesen bekommt, sondern den eigentlichen Wert durch new zugewiesen bekommt?
Hallo OOPler,
durch den "new"-Operator wird der Speicherverwaltung von Java gesagt für das anzulegende Objekt den nötigen freien Speicher zu reservieren.
Der Default-Konstruktor dient also dazu der neuen Instanz genügend Speicherplatz zur Verfügung zu stellen.
Die Wert-zuweisung kann dann später erfolgen, aber der Platz ist reserviert.
Danke. In meinem Code-Beispiel wird trotzdem ein Default-Konstruktor aufgerufen, da ich ja praktisch nur einen Text im Konstruktor Aufrufe? Gibt es auch eine Möglichkeit die Speicherfreigabe im Heap im Konstruktor manuell zu "steuern"? Und wenn der Konstruktor nur Speicherfrei gibt, dann folgt die Wertzuweisung, bzw. Initialisierung des Objektes, doch durch den new Operator statt?
Ein Default Konstruktor ist ein leerer Konstruktor, also einer der nichts macht außer das Objekt auf dem Heap zu erzeugen. Diesen Default konsturktor hat jede Klasse, auch wenn du eine neue schreibst und keinen deklarierst.
Mit deinem Konstruktor hast du den Default konstruktor überschrieben. Soweit ich weiss kannst du in Java manuell mit dem Speicher nichts machen, dafür gibt es new und Garbage Collector
Mir ist nicht bekannt, dass man die Heap-Zuweisung manuell steuern kann.
Das könnte ja auch problematisch werden wenn du z.B. eine Klasse mit einem String initialisierst, ihr aber keinen Speicher reservierst, dann kann diesem String auch kein Wert zugewiesen werden.
Ein Default Konstruktor ist ein leerer Konstruktor, also einer der nichts macht außer das Objekt auf dem Heap zu erzeugen. Diesen Default konsturktor hat jede Klasse, auch wenn du eine neue schreibst und keinen deklarierst.
Korrektur: Eine Default-Konstruktor hat eine Klasse nur dann automatisch, wenn gar kein Konstruktor definiert wurde. Sobald in der Klasse ein Konstruktor definiert ist, gibt es nur noch den.
Die Aussage "Jeder Klasse hat einen Default-Konstruktor" ist somit falsch.