Was genau ist ein Standardkonstruktor - können Sie mir sagen, welcher der folgenden Konstruktoren ein Standardkonstruktor ist und was ihn von anderen Konstruktoren unterscheidet?
public Module() {
this.name = "";
this.credits = 0;
this.hours = 0;
}
public Module(String name, int credits, int hours) {
this.name = name;
this.credits = credits;
this.hours = hours;
}
Keines von beiden. Wenn Sie es definieren, ist es nicht der Standard.
Der Standardkonstruktor ist der automatisch generierte Konstruktor ohne Argumente, sofern Sie keinen anderen Konstruktor definieren. Alle nicht initialisierten Felder werden auf ihre Standardwerte gesetzt. Für Ihr Beispiel würde es so aussehen, wenn die Typen String
, int
und int
sind und die Klasse selbst öffentlich ist:
public Module()
{
super();
this.name = null;
this.credits = 0;
this.hours = 0;
}
Dies ist genau dasselbe wie
public Module()
{}
Und genau dasselbe, als hätte man überhaupt keine Konstruktoren. Wenn Sie jedoch mindestens einen Konstruktor definieren, wird der Standardkonstruktor nicht erzeugt.
Referenz: Java Language Specification
Wenn eine Klasse keine Konstruktordeklarationen enthält, wird implizit ein Standardkonstruktor ohne formale Parameter und ohne throws-Klausel deklariert.
Technisch gesehen ist es nicht der Konstruktor (Standard oder nicht), der die Felder standardmäßig initialisiert. Ich belasse es jedoch bei der Antwort, weil
Ein Standardkonstruktor wird erstellt, wenn Sie keine Konstruktoren in Ihrer Klasse definieren. Es ist einfach ein Konstruktor ohne Argumente, der nichts tut. Bearbeiten: Außer dem Aufruf von super()
public Module(){
}
Ein Standardkonstruktor nimmt keine Argumente entgegen:
public class Student {
// default constructor
public Student() {
}
}