Default-Konstruktor: Unterschied zwischen den Versionen

Aus FI-Wiki
Keine Bearbeitungszusammenfassung
 
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.


== Selbst definierter Default-Konstruktor ==
== Beispiel ==
Man kann den Default-Konstruktor auch selbst anlegen, z. B. um Startwerte zu setzen:
 
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 name;
    int alter;
    boolean aktiv;
}
</syntaxhighlight>
 
Nach
 
<syntaxhighlight lang="java">
Person person = new Person();
</syntaxhighlight>
 
gelten zunächst:
 
<syntaxhighlight lang="text">
name  → null
alter → 0
aktiv → false
</syntaxhighlight>


    String marke;
== Eigener Konstruktor ==
    int baujahr;


     public Auto() {
Sobald mindestens ein eigener Konstruktor definiert wird, erzeugt der Compiler '''keinen Default-Konstruktor mehr'''.
         marke = "Unbekannt";
 
        baujahr = 0;
<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:
 
<syntaxhighlight lang="java">
Person person = new Person("Anna");
</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.


== Verwendung ==
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
Auto auto = new Auto();   // ruft den Default-Konstruktor auf
public Person() {
    name = "Unbekannt";
}
</syntaxhighlight>
</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.