Hi,
Bin neu bei Java, weniger aber allgemein bei Programmier- oder Skriptsprachen.
In Tutorials steht, man definiere Konstruktoren, indem man einer Methode denselben Namen gibt wie der Klasse. Also zum Beispiel
Wieso muss man das tun, warum gibt es nicht einfach ein Schlüsselwort für Konstruktorfunktionen? Zumal man zum Instanzieren dann nicht Auto.Auto() schreibt sondern new Auto(). Das hat zur Folge, dass ich den Namen aller Konstruktoren ändern muss, wenn ich den Klassennamen anpassen möchte und überhaupt Dinge mehrfach schreibe, was niemand gerne macht. (Ergänzend: Wenn ich nun ein zweites Objekt desselben Typs innerhalb der Klasse benötige, muss ich die Variable wieder als Auto deklarieren? Gibt es kein thistype?)
Daraus ergibt sich gleich meine zweite Frage. Wendet man wirklich new Auto() außerhalb der Klasse an? Erstens ist das irgendwie eine Extrasyntax, von der ich nicht weiß, warum sie nötig ist, zweitens sollten Klassen ja unabhängig sein, bei new wird aber zwangsweise ein neues Objekt allokiert. Es könnte doch auch sein, dass die Klasse mir stattdessen ein gecachetes Objekt zurückgeben will, um mit diesem zu arbeiten oder mir die Anfrage verweigern möchte.
3. Es wird ein Defaultkonstruktor angelegt, wenn man keine eigenen bestimmt. Auch hier verstehe ich den Sinn nicht. Wenn man ein Objekt anlegt, gibt es praktisch immer irgendetwas zu tun, um es zu registrieren und betriebsbereit zu machen. Man arbeitet nicht von außerhalb mit leeren Objekten. Deswegen sehe ich das nur als Fehlerquelle für sowas:
4. Als ich vom Destruktor finalize las und dass er vom Garbage Collector aufgerufen wird, dachte ich, das ist dann eigentlich nur zum Debugging gut, um zu schauen, ob Objekte wirklich freigegeben werden oder bei asynchronem Zeug, wo es nicht wirklich interessiert, wann die genau ins Gras beißen. Was passiert, wenn Objekte sich nur mehr gegenseitig referenzieren wie bei einer Linked List zum Beispiel, man aber auf keines der Objekte mehr zugreifen kann? Merkt der Collector das? Wobei ich eigene Destruktoren aber auch obligatorisch finde.
So, das wars erst einmal. Danke im Voraus für Antworten.
Bin neu bei Java, weniger aber allgemein bei Programmier- oder Skriptsprachen.
In Tutorials steht, man definiere Konstruktoren, indem man einer Methode denselben Namen gibt wie der Klasse. Also zum Beispiel
Java:
class Auto{
public Auto(){...}
}
Wieso muss man das tun, warum gibt es nicht einfach ein Schlüsselwort für Konstruktorfunktionen? Zumal man zum Instanzieren dann nicht Auto.Auto() schreibt sondern new Auto(). Das hat zur Folge, dass ich den Namen aller Konstruktoren ändern muss, wenn ich den Klassennamen anpassen möchte und überhaupt Dinge mehrfach schreibe, was niemand gerne macht. (Ergänzend: Wenn ich nun ein zweites Objekt desselben Typs innerhalb der Klasse benötige, muss ich die Variable wieder als Auto deklarieren? Gibt es kein thistype?)
Daraus ergibt sich gleich meine zweite Frage. Wendet man wirklich new Auto() außerhalb der Klasse an? Erstens ist das irgendwie eine Extrasyntax, von der ich nicht weiß, warum sie nötig ist, zweitens sollten Klassen ja unabhängig sein, bei new wird aber zwangsweise ein neues Objekt allokiert. Es könnte doch auch sein, dass die Klasse mir stattdessen ein gecachetes Objekt zurückgeben will, um mit diesem zu arbeiten oder mir die Anfrage verweigern möchte.
3. Es wird ein Defaultkonstruktor angelegt, wenn man keine eigenen bestimmt. Auch hier verstehe ich den Sinn nicht. Wenn man ein Objekt anlegt, gibt es praktisch immer irgendetwas zu tun, um es zu registrieren und betriebsbereit zu machen. Man arbeitet nicht von außerhalb mit leeren Objekten. Deswegen sehe ich das nur als Fehlerquelle für sowas:
Java:
class Auto{
public Autp(){...}
}
4. Als ich vom Destruktor finalize las und dass er vom Garbage Collector aufgerufen wird, dachte ich, das ist dann eigentlich nur zum Debugging gut, um zu schauen, ob Objekte wirklich freigegeben werden oder bei asynchronem Zeug, wo es nicht wirklich interessiert, wann die genau ins Gras beißen. Was passiert, wenn Objekte sich nur mehr gegenseitig referenzieren wie bei einer Linked List zum Beispiel, man aber auf keines der Objekte mehr zugreifen kann? Merkt der Collector das? Wobei ich eigene Destruktoren aber auch obligatorisch finde.
So, das wars erst einmal. Danke im Voraus für Antworten.