Ein Java-Konstruktor erstellt eine neue Instanz eines bereits definierten Objekts. Dieser Artikel beschreibt die Verwendung von Java-Konstruktormethoden zum Erstellen eines Personenobjekts.
Hinweis: Für dieses Beispiel müssen Sie zwei Dateien im selben Ordner erstellen: Person.java definiert die Personenklasse und PersonExample.java enthält die Hauptmethode das schafft Personenobjekte.
Die Konstruktormethode
Beginnen wir mit der Erstellung einer Personenklasse mit vier privaten Feldern: Vorname, Nachname, Adresse und Benutzername. Diese Felder sind private Variablen und zusammen bilden ihre Werte den Status eines Objekts. Wir haben auch die einfachste Konstruktormethode hinzugefügt:
öffentliche Klasse Person {
private String firstName;
private String lastName;
private String-Adresse;
privater String-Benutzername;
// Die Konstruktormethode
öffentliche Person ()
{
}
}
Die Konstruktormethode ähnelt jeder anderen öffentlichen Methode, außer dass sie denselben Namen wie die Klasse hat und keinen Wert zurückgeben kann. Es kann keinen, einen oder mehrere Parameter haben.
Derzeit macht unsere Konstruktormethode überhaupt nichts und es ist ein guter Zeitpunkt zu überlegen, was dies für den Anfangszustand des Person-Objekts bedeutet. Wenn wir die Dinge so belassen haben, wie sie sind, oder wenn wir keine Konstruktormethode in unsere Person-Klasse aufgenommen haben (in Java Sie können eine Klasse ohne eine definieren), dann hätten die Felder keine Werte - und wir möchten sicher, dass unsere Person einen Namen und eine Adresse sowie andere Merkmale hat. Wenn Sie der Meinung sind, dass Ihr Objekt möglicherweise nicht wie erwartet verwendet wird und die Felder beim Erstellen des Objekts möglicherweise nicht initialisiert werden, definieren Sie sie immer mit einem Standardwert:
öffentliche Klasse Person {
private String firstName = "";
private String lastName = "";
private String address = "";
private String username = "";
// Die Konstruktormethode
öffentliche Person ()
{
}
}
Um sicherzustellen, dass eine Konstruktormethode nützlich ist, würden wir sie normalerweise so gestalten, dass Parameter erwartet werden. Die durch diese Parameter übergebenen Werte können verwendet werden, um die Werte der privaten Felder festzulegen:
öffentliche Klasse Person {
private String firstName;
private String lastName;
private String-Adresse;
privater String-Benutzername;
// Die Konstruktormethode
öffentliche Person (String personFirstname, String personLastName, String personAddress, String personUsername)
{
firstName = personFirstName;
lastName = personLastName;
address = personAddress;
Benutzername = personUsername;
}
// Eine Methode, um den Status des Objekts auf dem Bildschirm anzuzeigen
public void displayPersonDetails ()
{
System.out.println ("Name:" + Vorname + "" + Nachname);
System.out.println ("Adresse:" + Adresse);
System.out.println ("Benutzername:" + Benutzername);
}
}
Unsere Konstruktormethode erwartet nun, dass die Werte von vier Zeichenfolgen an sie übergeben werden. Sie werden dann verwendet, um den Anfangszustand des Objekts festzulegen. Wir haben auch eine neue Methode namens hinzugefügt displayPersonDetails () damit wir den Status des Objekts sehen können, nachdem es erstellt wurde.
Aufrufen der Konstruktormethode
Im Gegensatz zu anderen Methoden eines Objekts muss die Konstruktormethode mit dem Schlüsselwort "new" aufgerufen werden:
öffentliche Klasse PersonExample {
public static void main (String [] args) {
Person dave = neue Person ("Dave", "Davidson", "12 Main St.", "DDavidson");
dave.displayPersonDetails ();
}
}
Folgendes haben wir getan:
- Um die neue Instanz des Person-Objekts zu erstellen, definieren wir zunächst eine Variable vom Typ Person, die das Objekt enthält. In diesem Beispiel haben wir es genannt Dave.
- Auf der anderen Seite des Gleichheitszeichens rufen wir die Konstruktormethode unserer Person-Klasse auf und übergeben ihr vier Zeichenfolgenwerte. Unsere Konstruktormethode nimmt diese vier Werte und setzt den Anfangszustand des Person-Objekts auf: Vorname = "Dave", Nachname = "Davidson", Adresse = "12 Main St", Benutzername = "DDavidson".
Beachten Sie, wie wir zur Java-Hauptklasse gewechselt sind, um das Person-Objekt aufzurufen. Wenn Sie mit Objekten arbeiten, erstrecken sich die Programme mehrere .java-Dateien. Stellen Sie sicher, dass Sie sie im selben Ordner speichern. Um das Programm zu kompilieren und auszuführen, kompilieren Sie einfach Java und führen Sie es aus Hauptklasse Datei (d.h. PersonExample.java). Der Java-Compiler ist intelligent genug, um zu erkennen, dass Sie den kompilieren möchten Person.java Datei auch, weil es sehen kann, dass Sie es in der PersonExample-Klasse verwendet haben.
Benennung von Parametern
Der Java-Compiler wird verwirrt, wenn die Parameter der Konstruktormethode dieselben Namen wie die privaten Felder haben. In diesem Beispiel können Sie sehen, dass wir zwischen ihnen unterschieden haben, indem wir den Parametern das Wort "Person" voranstellen. Es ist erwähnenswert, dass es einen anderen Weg gibt. Wir können stattdessen das Schlüsselwort "this" verwenden:
// Die Konstruktormethode
öffentliche Person (String Vorname, String Nachname, String Adresse, String Benutzername)
{
this.firstName = firstName;
this.lastName = lastName;
this.address = address;
this.username = username;
}
Das Schlüsselwort "this" teilt dem Java-Compiler mit, dass die Variable, der der Wert zugewiesen werden soll, die von der Klasse definierte ist, nicht der Parameter. Es ist eine Frage des Programmierstils, aber diese Methode hilft uns, Konstruktorparameter zu definieren, ohne mehrere Namen verwenden zu müssen.
Mehr als eine Konstruktormethode
Beim Entwerfen Ihrer Objektklassen können Sie nicht nur eine Konstruktormethode verwenden. Sie können entscheiden, dass ein Objekt auf verschiedene Arten initialisiert werden kann. Die einzige Einschränkung bei der Verwendung von mehr als einer Konstruktormethode besteht darin, dass sich die Parameter unterscheiden müssen.
Stellen Sie sich vor, dass wir zum Zeitpunkt der Erstellung des Person-Objekts den Benutzernamen möglicherweise nicht kennen. Fügen wir eine neue Konstruktormethode hinzu, die den Status des Person-Objekts nur mit Vorname, Nachname und Adresse festlegt:
öffentliche Klasse Person {
private String firstName;
private String lastName;
private String-Adresse;
privater String-Benutzername;
// Die Konstruktormethode
öffentliche Person (String Vorname, String Nachname, String Adresse, String Benutzername)
{
this.firstName = firstName;
this.lastName = lastName;
this.address = address;
this.username = username;
}
// Die neue Konstruktormethode
öffentliche Person (String Vorname, String Nachname, String Adresse)
{
this.firstName = firstName;
this.lastName = lastName;
this.address = address;
this.username = "";
}
// Eine Methode, um den Status des Objekts auf dem Bildschirm anzuzeigen
public void displayPersonDetails ()
{
System.out.println ("Name:" + Vorname + "" + Nachname);
System.out.println ("Adresse:" + Adresse);
System.out.println ("Benutzername:" + Benutzername);
}
}
Beachten Sie, dass die zweite Konstruktormethode auch "Person" genannt wird und auch keinen Wert zurückgibt. Der einzige Unterschied zur ersten Konstruktormethode sind die Parameter - diesmal nur erwartet drei Zeichenfolgenwerte: Vorname, Nachname und Adresse.
Wir können jetzt Personenobjekte auf zwei verschiedene Arten erstellen:
öffentliche Klasse PersonExample {
public static void main (String [] args) {
Person dave = neue Person ("Dave", "Davidson", "12 Main St.", "DDavidson");
Person jim = neue Person ("Jim", "Davidson", "15 Kings Road");
dave.displayPersonDetails ();
jim.displayPersonDetails ();
}
}
Person Dave wird mit einem Vornamen, einem Nachnamen, einer Adresse und einem Benutzernamen erstellt. Person Jim, Es wird jedoch kein Benutzername angezeigt, d. h. der Benutzername ist die leere Zeichenfolge: Benutzername = "".
Eine kurze Zusammenfassung
Konstruktormethoden werden nur aufgerufen, wenn eine neue Instanz eines Objekts erstellt wird. Sie:
- Muss den gleichen Namen wie die Klasse haben
- Geben Sie keinen Wert zurück
- Kann keine haben, eine oder viele Parameter
- Kann mehr als eine Nummer haben, solange jede Konstruktormethode einen anderen Parametersatz hat
- Kann haben Parameternamen das gleiche wie die privaten Felder, solange das Schlüsselwort "this" verwendet wird
- Werden mit dem Schlüsselwort "new" aufgerufen