Im Abschnitt „Methoden und Datenelemente“ haben wir erwähnt, dass Objekte in Java beim Erstellen initialisiert werden. Während der Initialisierung werden den Datenelementen des Objekts Anfangswerte zugewiesen. Wir können es explizit initialisieren. Wenn wir dem Datenelement keinen Anfangswert zuweisen, übernimmt das Datenelement basierend auf seinem Typ einen Standardanfangswert.
Bei der expliziten Initialisierung müssen wir beim Schreiben des Programms den Anfangswert ermitteln, was manchmal unpraktisch ist. Wir können den Konstruktor verwenden, um Objekte zu initialisieren. Konstruktoren können Datenelemente initialisieren und bestimmte Vorgänge angeben. Diese Vorgänge werden automatisch ausgeführt, wenn das Objekt erstellt wird.
Konstruktor definieren
Ein Konstruktor ist eine Methode. Wie normale Methoden definieren wir Konstruktoren in der Klasse. Konstruktoren haben die folgenden grundlegenden Eigenschaften:
1. Der Name des Konstruktors ist derselbe wie der Name der Klasse
2. Der Konstruktor hat keinen Rückgabewert
Wir definieren den Konstruktor der Human-Klasse:
public class Test{ public static void main(String[] args) { Human aPerson = new Human(160); System.out.println(aPerson.getHeight()); }}class Human{ /** * Konstruktor */ Human (int h) { this.height = h; System.out.println("I'm born"); int Höhe;}
Das obige Programm druckt den kopierten Codecode wie folgt aus:
Ich bin geboren
160
Konstruktoren können Parameterlisten wie gewöhnliche Methoden empfangen. Dabei erhält der Konstruktor Human() eine Ganzzahl als Parameter. Im Hauptteil der Methode weisen wir der Höhe des Datenelements den ganzzahligen Parameter zu. Der Konstruktor führt zwei Dinge aus, wenn das Objekt erstellt wird:
Konstruktoren können Parameterlisten wie gewöhnliche Methoden empfangen. Dabei erhält der Konstruktor Human() eine Ganzzahl als Parameter. Im Hauptteil der Methode weisen wir der Höhe des Datenelements den ganzzahligen Parameter zu. Der Konstruktor führt zwei Dinge aus, wenn das Objekt erstellt wird:
1. Geben Sie den Anfangswert für das Datenelement this.height = h an;
2. Führen Sie bestimmte Anfangsoperationen durch System.out.println("I'm born");
Auf diese Weise können wir den Anfangswert beim Aufruf des Konstruktors flexibel festlegen, ohne so eingeschränkt zu sein wie bei der expliziten Initialisierung.
Wie heißt der Konstruktor? Wenn wir Klassen erstellen, verwenden wir alle new Human(). Tatsächlich rufen wir den Konstruktor der Human-Klasse auf. Wenn wir diese Methode nicht definieren, stellt Java einen leeren Konstruktor bereit, der bei Verwendung von new aufgerufen wird. Wenn wir jedoch einen Konstruktor definieren, ruft Java beim Erstellen eines Objekts den definierten Konstruktor auf. Beim Aufruf geben wir einen Parameter von 160 an. Aus den endgültigen Ausführungsergebnissen können Sie auch ersehen, dass die Höhe des Objekts tatsächlich auf 160 initialisiert wurde.
Priorität der Initialisierungsmethode
Bei Methoden und Datenelementen können wir sehen, dass das Datenelement den expliziten Anfangswert anstelle des Standardanfangswerts annimmt, wenn wir einen expliziten Anfangswert angeben. Wenn wir jedoch beide einen expliziten Anfangswert bereitstellen und dasselbe Datenelement im Konstruktor initialisieren, wird der endgültige Anfangswert vom Konstruktor bestimmt. Zum Beispiel das folgende Beispiel:
public class Test{ public static void main(String[] args) { Human aPerson = new Human(160); System.out.println(aPerson.getHeight()); }}class Human{ /** * Konstruktor */ Human (int h) { this.height = h; } /** * accessor */ int getHeight() { return this.height } int height=170;
Das laufende Ergebnis ist:
Kopieren Sie den Codecode wie folgt:
160
Der endgültige Initialisierungswert des Objekts stimmt mit dem Wert in der Konstruktionsmethode überein. daher:
Build-Methoden > Explizite Initialisierer > Standardinitialisierer
(Tatsächlich hängt die sogenannte Priorität mit der Ausführungsreihenfolge während der Initialisierung zusammen. Auf diesen Punkt werde ich später näher eingehen.)
Methodenüberladung
Eine Klasse kann mehr als einen Konstruktor definieren, zum Beispiel:
public class Test{ public static void main(String[] args) { Human neZha = new Human(150, "shit"); System.out.println(neZha.getHeight()); Konstruktor 1 */ Human(int h) { this.height = h; System.out.println("Ich bin geboren"); /** * Konstruktor 2 */ Human(int h, String s) { this.height = h; System.out.println("Ne Zha: Ich bin geboren, " + s); /** * accessor */ int getHeight() { return this.height; ;}
Laufergebnisse:
Kopieren Sie den Codecode wie folgt:
Ne Zha: Ich bin geboren, Scheiße
150
Oben sind zwei Konstruktoren definiert, beide mit dem Namen Human. Die beiden Konstruktoren haben unterschiedliche Parameterlisten.
Wenn Sie zum Erstellen eines Objekts new verwenden, entscheidet Java anhand der bereitgestellten Parameter, welcher Konstruktor erstellt werden soll. Beim Erstellen von neZha stellen wir beispielsweise zwei Parameter bereit: die Ganzzahl 150 und die Zeichenfolge „shit“, die der Parameterliste der zweiten Build-Methode entspricht, sodass Java die zweite Build-Methode aufruft.
In Java bestimmt Java die aufzurufende Methode sowohl anhand des Methodennamens als auch der Parameterliste. Dies wird als Methodenüberladung bezeichnet. Build-Methoden können überlastet sein, und auch normale Methoden können überlastet sein, wie zum Beispiel die Methode „breath()“ unten:
public class Test{ public static void main(String[] args) { Human aPerson = new Human(10); }}class Human{ /** * Breath() 1 */ void Breath() { System.out.println("hu...hu..."); } /** * Breath() 2 */ void Breath(int Rep) { Int i; ) { System.out.println("lu...lu..."); } } int height;}
Laufergebnisse:
Kopieren Sie den Codecode wie folgt:
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
Wie Sie sehen können, wird die zweite Methodebrew() aufgerufen, deren Parameterliste mit ihr übereinstimmt, da während des Aufrufs ein Parameter bereitgestellt wird: die Ganzzahl 10.
Zusammenfassen
Konstruktormerkmale: gleicher Name wie Klasse, kein Rückgabewert
Zweck des Konstruktors: Initialisierung, anfänglicher Betrieb. Methodenüberladung: Methodenname + Parameterliste -> welche Methode tatsächlich aufgerufen wird