Konstruktor

Status
Nicht offen für weitere Antworten.

777

Bekanntes Mitglied
Irgendwie verstehe ich nicht, was ein Konstruktor ist. Im Buch steht dazu:

Nun zu der Methode, die den selben Namen trägt wie die ganze Klasse. Dies ist eine ganz besondere Klassenfunktion, nämlich ein Konstruktor. Jede Klasse braucht einen oder sogar mehrere Konstruktoren, die beim Initialisieren der Variablen der Klasse behilflich sind.

Doch irgendwie habe ich bisher sauoft mit Klassen gearbeitet in denen es keinen "Konstuktor" gibt. Was ist das besondere daran?
Was bringt der Konstuktor... das im Buch verstehe ich nicht :(
cya
David
 

777

Bekanntes Mitglied
Ein Konstruktor wird automatisch aufgerufen, wenn ein Objekt mit dem new-Operator angelegt wird. Mit einem eigenen Konstruktor lässt sich erreichen, dass ein Objekt nach seiner Erzeugung einen sinnvollen Anfangszustand aufweist. Dies kann bei Klassen, die Variablen beinhalten, notwendig sein, da sie ohne vorherige Zuweisung beziehungsweise Initialisierung keinen Sinn machen würden.

Ja schon klar.
Aber ich habe zum Beispiel für Konstruktoren das hier:

Der Konstuktor:

Code:
[
class CMitarbeiter {
  String m_name;
  String m_vorname;
  int m_gehalt;       

  CMitarbeiter(String name, String vorname, 
               int gehalt) {
    m_name = name;
    m_vorname = vorname;
    m_gehalt = gehalt;
  }

  void datenAusgeben() {
    System.out.println("\n");
    System.out.println("Name    : " + m_name);
    System.out.println("Vorname : " + m_vorname);
    System.out.println("Gehalt  : " + m_gehalt + " Euro");
  }

  void gehaltErhoehen(int erhoehung) {
    m_gehalt += erhoehung;
  }
} 

public class CMitarbeiterBeispiel {
  public static void main(String[] args) {
    // 2 neue Mitarbeiter instanziieren
    CMitarbeiter billy  = new CMitarbeiter("Gates","Bill",3000);
    CMitarbeiter stevie = new CMitarbeiter("Jobs","Steve",3500);

    // Daten ausgeben
    billy.datenAusgeben();
    stevie.datenAusgeben();

    // Gehalt von a erhöhen
    billy.gehaltErhoehen(500);

    // Kontrolle
    billy.datenAusgeben();
    stevie.datenAusgeben();
  }
}


Der Konstruktor wäre hier CMitarbeiter. Aber ich sehe an dieser Klasse nichts besonderes.

Code:
    CMitarbeiter billy  = new CMitarbeiter("Gates","Bill",3000);
    CMitarbeiter stevie = new CMitarbeiter("Jobs","Steve",3500);

Durch den new Operator wird hier zwar wirklich der Konstuktor aufgerufen aber nicht wegen dem newOperator sondern einfach, weil da ja nochmal der Name vom Konstruktor steht: CMitarbeiter.

Irgendwie versteh ich das nicht :(
cya
David
 

jPat

Bekanntes Mitglied
hi,

Wenn du eine Klasse schreibst, die keinen Konstruktor hat, wird automatisch ein parameterloser Konstuktor erzeugt, der beim Instanzieren auch aufgerufen wird.

--
Mit einem eigenen Konstruktor lässt sich erreichen, dass ein Objekt nach seiner Erzeugung einen sinnvollen Anfangszustand aufweist.
--
Das müßte dir klar sein, daß es manchmal nötig ist, die Klasse mit gültigen Werten beim Erzeugen zu belegen.

Man kann auch mehrere Konstruktoren benutzen. Z.B. bei einer Liste, die du selbst Implementiert hast, könntest du entweder die länge schon voreinstellen oder evtl ein Array übergeben, welches dann in die Liste eingefügt wird. Somit ist es beim Erzeugen der Klasse schon festgelegt, wie du diese Klasse benutzen möchtest.

und noch etwas: Wenn man zb. von einer Klasse erbt, kannst du im Kind konstruktor den Elternkostruktor aufrufen mit der super() Methode. ein Beispiel:

class myFrame extends Frame{

myFrame(String title){
super(title);
}
// hier kannst du dein Frame bel. erweitern
}


Ich hoffe, ich konnte dir ein wenig die Augen öffnen.

Gruß
Patrick
 
B

bygones

Gast
der konstruktor ist dazu da ein Objekt zu initieren.

Jede Klasse hat automatisch den sog. parameterlosen default konstruktor. Sobald du einen eigenen schreibst fällt jedoch dieser Konstruktor weg.

Im Konstruktor kannst du variablen des Objektes auf einen Anfangszustand setzen, du initiierst sozusagen die Instanz mit ihren Variablen usw.
 

777

Bekanntes Mitglied
Das selbe könnte ich aber auch erreichen, wenn mein Konstuktor nicht so heißen würde, wie die Hauptklasse.
Ich verstehe schon, wozu genau der da ist etc nur was daran so toll ist, dass der den selben Namen, wie die Hauptklasse hat verstehe ich noch nicht richtig.
Der Autor meines Javabuches ist scheinbar schwer begeistert davon:

"UND STELLEN SIE SICH VOR: DER KONSTRUKTOR HAT IMMER DEN SELBEN NAMEN, WIE DIE HAUPTKLASSE!!! YEAHHH!"

Naja... und da ist mir halt aufgefallen, dass es doch irgendwie auch anders geht und ich den so nennen kann, wie ich will ^^
cya
David
 

Leroy42

Top Contributor
Der Autor meines Javabuches hat gesagt.:
"UND STELLEN SIE SICH VOR: DER KONSTRUKTOR HAT IMMER DEN SELBEN NAMEN, WIE DIE HAUPTKLASSE!!! YEAHHH!"

Was ist das denn für ein Autor? :shock:

Aber anders gefragt: Was spricht denn dagegen, daß die Konstruktoren so heißen
wie die Klasse selbst. Alles andere würde doch nur verwirren und Java müßte ein
neues Schlüsselwort verpaßt bekommen:

Code:
public constructor ratetMalWasIchMache(String x) {...}
 
B

bygones

Gast
777 hat gesagt.:
Das selbe könnte ich aber auch erreichen, wenn mein Konstuktor nicht so heißen würde, wie die Hauptklasse.
nein könntest du nicht, dann wäre es eine normale methode die du explizit aufrufen musst

777 hat gesagt.:
Ich verstehe schon, wozu genau der da ist etc nur was daran so toll ist, dass der den selben Namen, wie die Hauptklasse hat verstehe ich noch nicht richtig.
damit wird die besonderheit des Konstruktors hervorgehoben. in dem du new MyClass() aufrufst wird automatisch der Konstruktor angesprochen....

777 hat gesagt.:
Der Autor meines Javabuches ist scheinbar schwer begeistert davon:

"UND STELLEN SIE SICH VOR: DER KONSTRUKTOR HAT IMMER DEN SELBEN NAMEN, WIE DIE HAUPTKLASSE!!! YEAHHH!"
klingt ganz nach den Dummy Bücher autoren :)

777 hat gesagt.:
Naja... und da ist mir halt aufgefallen, dass es doch irgendwie auch anders geht und ich den so nennen kann, wie ich will ^^
das gewöhne dir gleich mal ab... es gibt einfach Standards in der Programmierung und das ist nun mal einer, den man zu verwenden hat... punkt aus :)
 
G

Guest

Gast
777 hat gesagt.:
Das selbe könnte ich aber auch erreichen, wenn mein Konstuktor nicht so heißen würde, wie die Hauptklasse.
Ich verstehe schon, wozu genau der da ist etc nur was daran so toll ist, dass der den selben Namen, wie die Hauptklasse hat verstehe ich noch nicht richtig....
Es hat mehrere Gründe.

1) Dadurch wird darauf hingewiesen, dass es sich bei einem Konstruktor um eine "besondere Methode"
handelt, die nur während der Erzeugung einer Instanz einer Klasse aufgerufen wird bzw. aufgerufen
werden kann.

2) Wäre der Name beliebig wählbar, müsste man zusätzlich zum Klassennamen noch schreiben,
wie es initialisiert werden soll und dies direkt danach "von Hand" wieder machen.
z.B.
Code:
Person p = new Person();
p.init("Bart", "Simpson");
statt einfach
Code:
Person p = new Person("Bart", "Simpson");

3) Wäre der Name, wie unter 2) beliebig wählbar bzw. semantisch und nicht syntaktisch unterscheidbar,
würde man auch bei der Vererbung oder Verwendung von Code anderer Leute auf Probleme stossen,
wenn man nicht wüsste, wie man das Ding ordentlich initialisiert.

4) Ischt halt so, und zwar in allen C-ähnlichen Sprachen. ;)

777 hat gesagt.:
"UND STELLEN SIE SICH VOR: DER KONSTRUKTOR HAT IMMER DEN SELBEN NAMEN, WIE DIE HAUPTKLASSE!!! YEAHHH!"
Schmeiss das Buch durch's Fenster. Der Typ sollte Comics schreiben, keine Fachbücher.
Es war sicherlich eins der "Java für Dummies" oder "Java in 24 Stunden lernen" o.ä.
 

Tobias

Top Contributor
777, du meinst wahrscheinlich, das der Konstruktor auch einen festgelegten anderen Namen haben könnte, oder? So, wie __construct() in PHP5? Ja, könnte er. Hat er aber nicht. Ist kein Grund gleich in Exstase durch's Zimmer zu hüpfen, wie das der Autor deines Javabuchs tut, sondern nur eine Sprachregel...

mpG
Tobias
 

777

Bekanntes Mitglied
:D Okay danke.. ich habe das jetzt verstanden.
Also das, was ich da geschrieben habe war natürlich leicht übertrieben, weil ich grad noch mehr Programmierprobleme hatte und da war ich halt sauer auf meinen Compiler und das Buch.
Es stand natürlich wortwörltich anders da^^
Es ist eigentlich "Jetzt lerne ich Java"
Ein meiner Meinung nach sehr gutes Buch und nix für Dummis xDD
Danke für eure Antworten und gute Nacht
David
 
B

bygones

Gast
die Dummy Reihe heißt nun mal so und ist nicht unbedingt immer die schlechteste wahl :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Parameter Konstruktor plus rechnen Allgemeine Java-Themen 6
M Konstruktor einer Methode Allgemeine Java-Themen 35
M Frage zum Konstruktor Allgemeine Java-Themen 2
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
J Konstruktor in JSP beim Kompilieren nicht gefunden Allgemeine Java-Themen 3
J Inner class + Leer-Konstruktor Allgemeine Java-Themen 1
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
H Beim Konstruktor "this" Allgemeine Java-Themen 4
K Variablen Konstruktor, unendlich viele Allgemeine Java-Themen 3
T Konstruktor löst exception aus Allgemeine Java-Themen 7
C Klassen und Konstruktor Allgemeine Java-Themen 2
W Threads NullPointer: Konstruktor "zu langsam"? Allgemeine Java-Themen 3
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
DStrohma In abstrakter Klasse Konstruktor von Instanz implementieren Allgemeine Java-Themen 11
C Reflektions, Benutzer soll Konstruktor auswählen und Parameter übergeben können Allgemeine Java-Themen 5
S OOP this-Referenz als Konstruktor-Übergabe Allgemeine Java-Themen 8
ruutaiokwu NullPointerException auf member, die per konstruktor gesetzt wird (multithread-kontext) Allgemeine Java-Themen 2
ruutaiokwu auf priv. konstruktor von "aussen" zugreifen? Allgemeine Java-Themen 4
A Methoden laufen im Konstruktor, außerhalb allerdings nicht Allgemeine Java-Themen 2
E Array im Konstruktor übergeben Allgemeine Java-Themen 3
A Reflection Konstruktor Parameter Supertyp Allgemeine Java-Themen 2
X Dynamisch Konstruktor aufrufen Allgemeine Java-Themen 12
J abstrakte Klassen, Konstanten und Konstruktor Allgemeine Java-Themen 9
E Finale Attribute und Konstruktor Allgemeine Java-Themen 3
S Konstruktor ermitteln Allgemeine Java-Themen 3
B Konstruktor wird nicht aufgerufen Allgemeine Java-Themen 4
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
S Neue Instanz eines Objekts erzeugen - Konstruktor erhaelt Parameter. Allgemeine Java-Themen 5
B Konstruktor - Vererbungsproblem Allgemeine Java-Themen 2
S konstruktor vererben Allgemeine Java-Themen 5
B Problem mit Methodenaufruf in Konstruktor Allgemeine Java-Themen 6
D [SOLVED] Collection wird nicht richtig per Konstruktor übernommen Allgemeine Java-Themen 8
S Instanz in einer Klasse erstellen, und dem Konstruktor die eigene Klasse mitgeben Allgemeine Java-Themen 4
M Konstruktor / statischer Block Allgemeine Java-Themen 13
Ark Konstruktor per Reflection nicht bekannt Allgemeine Java-Themen 4
J Klasse auf Konstruktor oder Methode testen? Allgemeine Java-Themen 3
Junktyz Konstruktor Allgemeine Java-Themen 9
T Schleife im Konstruktor? Allgemeine Java-Themen 9
conan2 super-super-Konstruktor? Allgemeine Java-Themen 3
P static-Methode aus dem Konstruktor aufrufen Allgemeine Java-Themen 6
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
MQue zaehlen im Konstruktor Allgemeine Java-Themen 3
V Initialisierung nur im Konstruktor? Allgemeine Java-Themen 14
J Konstruktor-Aufruf nur aus einem bestimmten Package erlauben Allgemeine Java-Themen 5
T Konstruktor von Hashtable unter Java 5.0! Allgemeine Java-Themen 3
M Feld initialisieren, direkt oder Konstruktor Allgemeine Java-Themen 2
D super-Konstruktor ist nicht super ;) Allgemeine Java-Themen 6
A Objektmethode aus Konstruktor aufrufen? Allgemeine Java-Themen 14
M Konstruktor, der Excpetions wirft Allgemeine Java-Themen 2
H Super-Konstruktor Allgemeine Java-Themen 7
A Exception in Konstruktor - trotzdem wird Objekt erzeugt! Allgemeine Java-Themen 3
S Konstruktor vererben Allgemeine Java-Themen 9
thE_29 String Konstruktor - Umwandlungsprobleme Allgemeine Java-Themen 5
J Probleme mit dem Konstruktor Allgemeine Java-Themen 8
G Konstruktor-Aufruf nun mit oder ohne Typ? Allgemeine Java-Themen 9
D Kein public Konstruktor Allgemeine Java-Themen 4
K Exception im Konstruktor / Objekt == null Allgemeine Java-Themen 7
S konstruktor nur innerhalb der klasse aufrufbar Allgemeine Java-Themen 5
S konstruktor im interface Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben