Default-Konstruktor: Unterschied zwischen den Versionen

Aus FI-Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Ein '''Default-Konstruktor''' (Standardkonstruktor) ist ein Konstruktor ohne Parameter.
Ein '''Konstruktor''' wird beim Erzeugen eines Objekts aufgerufen und dient zur Initialisierung des Objekts.
Er wird automatisch erzeugt, wenn in einer Klasse **kein eigener Konstruktor** definiert ist. 
Wird in einer Java-Klasse '''kein eigener Konstruktor''' definiert, erzeugt der Compiler automatisch einen sogenannten '''Default-Konstruktor'''.
Seine Aufgabe ist es, ein Objekt mit Standardwerten zu initialisieren.


== Automatisch erzeugter Default-Konstruktor ==
== Beispiel ==
Wenn keine Konstruktoren vorhanden sind, generiert Java automatisch einen parameterlosen Konstruktor:
 
Die Klasse besitzt keinen selbst definierten Konstruktor:
 
<syntaxhighlight lang="java">
public class Person {
    String name;
    int alter;
}
</syntaxhighlight>
 
Trotzdem kann ein Objekt ohne Argumente erzeugt werden:
 
<syntaxhighlight lang="java">
Person person = new Person();
</syntaxhighlight>
 
Der Compiler stellt dafür automatisch einen Default-Konstruktor bereit.
 
Vereinfacht entspricht dieser:
 
<syntaxhighlight lang="java">
public Person() {
    super();
}
</syntaxhighlight>
 
Die Sichtbarkeit des automatisch erzeugten Default-Konstruktors entspricht dabei der Sichtbarkeit der Klasse.
 
== Initialwerte der Attribute ==
 
Werden Attribute nicht ausdrücklich initialisiert, erhalten sie ihre Standardwerte.
 
{| class="wikitable" style="width:100%; text-align:center;"
! Datentyp !! Standardwert
|-
| byte, short, int, long || 0
|-
| float, double || 0.0
|-
| boolean || false
|-
| char || '\u0000'
|-
| Referenztypen || null
|}
 
Beispiel:


<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
public class Auto {
public class Person {
     String marke;
     String name;
     int baujahr;
     int alter;
     // Java erzeugt automatisch:
     boolean aktiv;
    // public Auto() { }
}
}
</syntaxhighlight>
</syntaxhighlight>


== Selbst definierter Default-Konstruktor ==
Nach
Man kann den Default-Konstruktor auch selbst anlegen, z. B. um Startwerte zu setzen:


<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
public class Auto {
Person person = new Person();
</syntaxhighlight>
 
gelten zunächst:


    String marke;
<syntaxhighlight lang="text">
    int baujahr;
name  → null
alter → 0
aktiv → false
</syntaxhighlight>


     public Auto() {
== Eigener Konstruktor ==
         marke = "Unbekannt";
 
        baujahr = 0;
Sobald mindestens ein eigener Konstruktor definiert wird, erzeugt der Compiler '''keinen Default-Konstruktor mehr'''.
 
<syntaxhighlight lang="java">
public class Person {
    String name;
 
     public Person(String name) {
         this.name = name;
     }
     }
}
}
</syntaxhighlight>
</syntaxhighlight>


== Wichtig ==
Folgender Aufruf ist jetzt nicht mehr möglich:
* Sobald ein '''eigener Konstruktor''' mit Parametern definiert wird, 
 
  erstellt Java den Default-Konstruktor **nicht mehr automatisch**. 
<syntaxhighlight lang="java">
* Wenn man dann trotzdem einen parameterlosen Konstruktor benötigt, 
Person person = new Person();  // Compilerfehler
  muss er manuell hinzugefügt werden.
</syntaxhighlight>
 
Es existiert nur der selbst definierte Konstruktor:


== Verwendung ==
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
Auto auto = new Auto();   // ruft den Default-Konstruktor auf
Person person = new Person("Anna");
</syntaxhighlight>
</syntaxhighlight>
Soll zusätzlich ein Konstruktor ohne Parameter vorhanden sein, muss dieser selbst definiert werden:
<syntaxhighlight lang="java">
public Person() {
}
public Person(String name) {
    this.name = name;
}
</syntaxhighlight>
== Default-Konstruktor und parameterloser Konstruktor ==
Die Begriffe sollten nicht verwechselt werden:
* '''Default-Konstruktor:''' wird automatisch vom Compiler erzeugt, wenn kein Konstruktor definiert wurde.
* '''Parameterloser Konstruktor:''' besitzt keine Parameter und kann auch selbst programmiert werden.
<syntaxhighlight lang="java">
public Person() {
    name = "Unbekannt";
}
</syntaxhighlight>
Dieser Konstruktor ist '''parameterlos''', aber kein Default-Konstruktor, da er vom Programmierer selbst definiert wurde.


== Kurzmerksatz ==
== Kurzmerksatz ==
'''Der Default-Konstruktor ist ein parameterloser Konstruktor, der automatisch entsteht,außer die Klasse besitzt eigene Konstruktoren.'''
 
'''Definiert eine Klasse keinen Konstruktor, erzeugt der Java-Compiler automatisch einen Default-Konstruktor. Sobald ein eigener Konstruktor vorhanden ist, wird kein Default-Konstruktor mehr erzeugt.'''

Aktuelle Version vom 7. September 2026, 10:49 Uhr

Ein Konstruktor wird beim Erzeugen eines Objekts aufgerufen und dient zur Initialisierung des Objekts. Wird in einer Java-Klasse kein eigener Konstruktor definiert, erzeugt der Compiler automatisch einen sogenannten Default-Konstruktor.

Beispiel

Die Klasse besitzt keinen selbst definierten Konstruktor:

public class Person {
    String name;
    int alter;
}

Trotzdem kann ein Objekt ohne Argumente erzeugt werden:

Person person = new Person();

Der Compiler stellt dafür automatisch einen Default-Konstruktor bereit.

Vereinfacht entspricht dieser:

public Person() {
    super();
}

Die Sichtbarkeit des automatisch erzeugten Default-Konstruktors entspricht dabei der Sichtbarkeit der Klasse.

Initialwerte der Attribute

Werden Attribute nicht ausdrücklich initialisiert, erhalten sie ihre Standardwerte.

Datentyp Standardwert
byte, short, int, long 0
float, double 0.0
boolean false
char '\u0000'
Referenztypen null

Beispiel:

public class Person {
    String name;
    int alter;
    boolean aktiv;
}

Nach

Person person = new Person();

gelten zunächst:

name  → null
alter → 0
aktiv → false

Eigener Konstruktor

Sobald mindestens ein eigener Konstruktor definiert wird, erzeugt der Compiler keinen Default-Konstruktor mehr.

public class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }
}

Folgender Aufruf ist jetzt nicht mehr möglich:

Person person = new Person();   // Compilerfehler

Es existiert nur der selbst definierte Konstruktor:

Person person = new Person("Anna");

Soll zusätzlich ein Konstruktor ohne Parameter vorhanden sein, muss dieser selbst definiert werden:

public Person() {
}

public Person(String name) {
    this.name = name;
}

Default-Konstruktor und parameterloser Konstruktor

Die Begriffe sollten nicht verwechselt werden:

  • Default-Konstruktor: wird automatisch vom Compiler erzeugt, wenn kein Konstruktor definiert wurde.
  • Parameterloser Konstruktor: besitzt keine Parameter und kann auch selbst programmiert werden.
public Person() {
    name = "Unbekannt";
}

Dieser Konstruktor ist parameterlos, aber kein Default-Konstruktor, da er vom Programmierer selbst definiert wurde.

Kurzmerksatz

Definiert eine Klasse keinen Konstruktor, erzeugt der Java-Compiler automatisch einen Default-Konstruktor. Sobald ein eigener Konstruktor vorhanden ist, wird kein Default-Konstruktor mehr erzeugt.