Default-Konstruktor: Unterschied zwischen den Versionen

Aus FI-Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(Eine dazwischenliegende Version desselben Benutzers wird 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.