Bei Methoden und Datenmembern 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 sehr 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.
Definieren Sie den Konstruktor
Ein Konstruktor ist eine Methode. Wie normale Methoden definieren wir Konstruktoren in der Klasse. Der Konstruktor hat 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:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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("Ich bin geboren");
}
/**
* Accessor
*/
int getHeight ()
{
return this.height;
}
int height;
}
Das obige Programm druckt
I'm born 160
Der Konstruktor kann wie eine normale Methode eine Parameterliste 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. Konstruktoren machen zwei Dinge, wenn ein Objekt erstellt wird:
Konstruktoren können wie eine normale Methode eine Parameterliste 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. Stellt einen Anfangswert für das Datenelement this.height = h bereit.
2. Führt bestimmte Anfangsoperationen aus bin geboren");
Auf diese Weise können wir den Anfangswert beim Aufruf des Konstruktors flexibel festlegen, ohne so eingeschränkt zu sein wie bei der Anzeigeinitialisierung.
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
In Methoden und Datenelementen können wir sehen, dass das Datenelement einen 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 im folgenden Beispiel:
public class Test { public static void main(String[] args) { Human aPerson = new Human(160); System.out.println(aPerson.getHeight()); } } class Human { /** * constructor */ Human(int h) { this.height = h; } /** * accessor */ int getHeight() { return this.height; } int height=170; // explicit initialization }
Das laufende Ergebnis ist:
160
Der endgültige Initialisierungswert des Objekts stimmt mit dem Wert in der Konstruktionsmethode überein. Daher:
Expliziter Anfangswert> Standard-Anfangswert
(Tatsächlich ist die sogenannte Priorität dieselbe wie die Ausführungsreihenfolge während Initialisierung Verwandte, ich werde später ausführlicher darauf eingehen)
Methodenüberladung
Mehr als ein Konstruktor kann in einer Klasse definiert werden, wie zum Beispiel:
public class Test { public static void main(String[] args) { Human neZha = new Human(150, "shit"); System.out.println(neZha.getHeight()); } } class Human { /** * constructor 1 */ Human(int h) { this.height = h; System.out.println("I'm born"); } /** * constructor 2 */ Human(int h, String s) { this.height = h; System.out.println("Ne Zha: I'm born, " + s); } /** * accessor */ int getHeight() { return this.height; } int height; }
Ausführen Ergebnis:
Ne Zha: I'm born, shit 150
Oben sind zwei Konstruktoren definiert, beide mit dem Namen Human. Die beiden Konstruktoren haben unterschiedliche Parameterlisten.
Wenn Sie new zum Erstellen eines Objekts 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. Die Build-Methode kann überlastet sein, und auch gewöhnliche Methoden können überlastet sein. Zum Beispiel die Methode Breath() unten:
public class Test { public static void main(String[] args) { Human aPerson = new Human(); aPerson.breath(10); } } class Human { /** * breath() 1 */ void breath() { System.out.println("hu...hu..."); } /** * breath() 2 */ void breath(int rep) { int i; for(i = 0; i < rep; i++) { System.out.println("lu...lu..."); } } int height; }
Laufergebnisse:
lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu... lu...lu...
Das können Sie sehen Aufgrund des Aufrufs wird ein Parameter bereitgestellt: die Ganzzahl 10, daher wird die zweite Methode Breath() aufgerufen, deren Parameterliste mit ihr übereinstimmt.
Zusammenfassung
Konstruktorfunktionen: Gleicher Name wie Klasse, kein Rückgabewert
Konstruktorzweck: Initialisierung, Erstoperation
Methodenüberladung: Methodenname + Parameterliste-> Welche Methode wird tatsächlich aufgerufen
Mehr Für Artikel zu mehreren grundlegenden Java-Tutorials zu Konstruktoren und Methodenüberladung beachten Sie bitte die chinesische PHP-Website!