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.
Im Buch Thinking in Java steht das der Konstruktor eigentlich eine statische Methode ist.
Das verstehe ich nicht ganz, weil mit dem Konstruktor initialisiert man doch auch nicht-statische Variablen und man kann nicht-statische Methoden aufrufen. Was steckt da dahinter?
Ich hab es bis jetzt immer so gesehen dass nicht der Konstruktor das Objekt erzeugt sondern das Keyword new und das der Konstruktor einfach die erste Methode ist, die aufgerufen wird wenn das Objekt erzeut wurde. Ist das komplett falsch?
Ich hab es bis jetzt immer so gesehen dass nicht der Konstruktor das Objekt erzeugt sondern das Keyword new und das der Konstruktor einfach die erste Methode ist, die aufgerufen wird wenn das Objekt erzeut wurde. Ist das komplett falsch?
würd ich auch sagen, denn wenn der konstruktor das objekt erst erzeugen würde, müsste er doch einen return wert geben und auf die speicherposition zeigen. deswegen muss das wörtchen new schon was machen, und nur der konstruktor wie oben schon geschrieben einfach die 1. methode sein.
Ja, deswegen kommt es mir auch komisch vor dass in diesem Buch steht der Konstruktor wäre statisch.
Ich warte jetzt auf die Antwort eines Java-Superexperten der die technischen Hintergründe genau erläutern kann.
Wieso ist der Konstruktor keine Methode? Also soweit ich weiß und auch einige weitere Quellen belegen, ist der Konstruktor sogar die einzige Methode, die ein Objekt anbieten muss:
Ein Konstruktor ist eine Methode, die automatisch aufgerufen wird, wenn eine neue Instanz einer Klasse erzeugt wird.
Der unitäre new-Operator dient zum Erzeugen eines neuen Exemplars einer Klasse. Durch seine Verwendung wird ein neuer Speicherbereich belegt, der das neue Objekt aufnimmt. Operand von new ist stets ein Aufruf des Konstruktors der Klasse, von dem ein Exemplar erzeugt werden soll.
Diese Formulierung ist etwas unglücklich. Ich vermute mal, worauf der Autor hindeuten wollte,
ist, daß new eine Art Klassenmethode ist.
In richtigen OO-Sprachen wie Smalltalk, wo alle Klassen selbst Objekte sind --
und zwar Instanzen ihrer zugeordneten Meta-Klasse -- ist nämlich genau das der Fall.
new ist dort eine ganz normale Klassenmethode die dir eben eine Instanz
der Klasse liefert. Da im Java-Konzept Klassen aber keine Objekte sind, genießen
die Konstruktoren eben eine Sonderstellung. Desweiteren gebe ich masseur Recht;
alle weiteren Betrachtungen sind eher philosophischer Natur...
In richtigen OO-Sprachen wie Smalltalk, wo alle Klassen selbst Objekte sind --
und zwar Instanzen ihrer zugeordneten Meta-Klasse -- ist nämlich genau das der Fall.
new ist dort eine ganz normale Klassenmethode die dir eben eine Instanz
der Klasse liefert. Da im Java-Konzept Klassen aber keine Objekte sind, genießen
die Konstruktoren eben eine Sonderstellung.
So vollständig anders ist das aber nicht: auch in Java gibt es ja Class-Objekte, die man m.E. durchaus als Instanzen einer zugeordneten Metaklasse bezeichnen könnten. Und natürlich kann man statt
Code:
Object o = new Object();
auch schreiben
Code:
Object o = Object.class.newInstance();
und so eine Instanz ohne Verwendung von new erzeugen.