Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Konstruktor | Klassen
Java Erweitert
course content

Kursinhalt

Java Erweitert

Java Erweitert

1. Tiefe Java-Struktur
2. Methoden
3. String Advanced
4. Klassen
5. Klassen Fortgeschritten

book
Konstruktor

Wie kann die Initialisierung einer Klasse vereinfacht werden?

Das manuelle Initialisieren jedes Feldes kann umständlich sein. Für solche Zwecke verfügen Klassen über Konstruktoren. Die Syntax für einen Konstruktor ist wie folgt:

Main.java

Main.java

copy
1234
modifier ClassName(ParameterType parameter1, ParameterType parameter2) { this.parameter1 = parameter1; this.parameter2 = parameter2; }

Im Folgenden werden die einzelnen Begriffe erläutert:

  • modifier: Bezieht sich auf den Zugriffsmodifizierer, der bei Konstruktoren häufig public ist. Fälle, in denen ein Konstruktor einen anderen Zugriffsmodifizierer haben kann, werden in einem separaten Kurs behandelt;
  • ClassName: Der Name der Klasse, in der dieser Konstruktor erstellt wird;
  • ParameterType: Der Typ des Parameters, der im Konstruktor verwendet wird. Hier ist besondere Aufmerksamkeit erforderlich, da dieser Parameter denselben Typ wie das Feld in der Klasse haben sollte; Beispiel: Hat die Klasse zwei Parameter, String name und int age, sollte der Konstruktor dieselben Parameter enthalten (wenn alle Felder über den Konstruktor initialisiert werden sollen). Möchte man nur ein bestimmtes Klassenfeld, z. B. name, über den Konstruktor initialisieren, sollte nur ein Parameter mit demselben Typ und Namen wie das Feld in der Klasse verwendet werden;
  • Anschließend werden im Rumpf des Konstruktors die Werte den Klassenfeldern mithilfe der übergebenen Parameter zugewiesen.

Schlüsselwort "this"

Mit dem Schlüsselwort this kann auf das Klassenfeld verwiesen werden, in dessen Kontext dieses Schlüsselwort verwendet wird. Wenn beispielsweise eine Klasse zwei Felder name und age besitzt, kann innerhalb des Konstruktors oder einer Methode this.name geschrieben werden. Dadurch wird explizit auf das Klassenfeld und nicht auf die lokale Variable verwiesen, die als Parameter an den Konstruktor oder die Methode übergeben wurde. Auf diese Weise lassen sich die Klassenfelder im Konstruktor mit folgender Syntax initialisieren: this.name = name;.

Beispiel

Im Folgenden ein Beispiel für einen Konstruktor in einer Klasse, der alle Felder initialisiert, um das Konzept zu verdeutlichen:

Person.java

Person.java

copy
1234567891011
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } }

Wir haben eine Klasse namens Person mit drei Feldern. Jedes dieser Felder wurde mithilfe des Schlüsselworts this im Konstruktor hinzugefügt. Der Konstruktor initialisiert somit die Felder mit den Werten aus den Parametern. Nutzen wir diesen Konstruktor in der main-Methode, um zu sehen, dass die Felder mit den übergebenen Parametern initialisiert werden:

Main.java

Main.java

copy
123456789101112131415161718192021
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); } }

Wir initialisierten das Person-Objekt bob mithilfe des Konstruktors, indem wir name, age und gender als Parameter übergeben haben. Anschließend gaben wir seine Parameter auf dem Bildschirm aus und sehen, dass das Objekt die Feldwerte wie in den Konstruktorparametern angegeben besitzt.

Konstruktorüberladung

Der Konstruktor kann auch überladen werden und muss nicht die Initialisierung aller Klassenfelder abdecken. Zum Beispiel, wenn wir das Geschlecht von Alice nicht angeben möchten, können wir den Konstruktor überladen, sodass er nur 2 Parameter akzeptiert und die Felder damit initialisiert:

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); } }

Es lässt sich feststellen, dass ein Konstruktor, ähnlich wie eine Methode, überladen werden kann und unterschiedliche Anzahlen sowie Typen von Parametern akzeptieren kann.

Standardkonstruktor

Ein Standardkonstruktor ist ein Konstruktor, der keine Parameter entgegennimmt und keine Felder initialisiert. Er ist in allen Klassen standardmäßig vorhanden, sofern keine andere Art von Konstruktor definiert wurde, weshalb er als Standardkonstruktor bezeichnet wird. Jedes Mal, wenn wir ein Objekt einer Klasse erstellen, verwenden wir einen Konstruktor. Um den Standardkonstruktor zu nutzen, wenn bereits ein Konstruktor mit Parametern existiert, müssen wir zusätzlich einen leeren Konstruktor schreiben:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); Person john = new Person(); System.out.println("John's name: " + john.name + ", John's age: " + john.age); } }

Wir verwenden drei verschiedene Konstruktoren, um jeweils ein Person-Objekt zu initialisieren. Wie im letzten Beispiel zu sehen ist, hat John keinen Namen und kein Alter, da diese Felder für das Objekt nicht initialisiert wurden. Somit können wir den Konstruktor beliebig oft überladen und Objekte darüber erzeugen.

1. Welche der folgenden Aussagen über Konstruktoren ist richtig?

2. Was ist der Zweck eines Konstruktors in Java?

3. Welcher der folgenden Codeausschnitte zeigt die korrekte Erstellung eines parametrisierten Konstruktors?

question mark

Welche der folgenden Aussagen über Konstruktoren ist richtig?

Select the correct answer

question mark

Was ist der Zweck eines Konstruktors in Java?

Select the correct answer

question mark

Welcher der folgenden Codeausschnitte zeigt die korrekte Erstellung eines parametrisierten Konstruktors?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 6

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

course content

Kursinhalt

Java Erweitert

Java Erweitert

1. Tiefe Java-Struktur
2. Methoden
3. String Advanced
4. Klassen
5. Klassen Fortgeschritten

book
Konstruktor

Wie kann die Initialisierung einer Klasse vereinfacht werden?

Das manuelle Initialisieren jedes Feldes kann umständlich sein. Für solche Zwecke verfügen Klassen über Konstruktoren. Die Syntax für einen Konstruktor ist wie folgt:

Main.java

Main.java

copy
1234
modifier ClassName(ParameterType parameter1, ParameterType parameter2) { this.parameter1 = parameter1; this.parameter2 = parameter2; }

Im Folgenden werden die einzelnen Begriffe erläutert:

  • modifier: Bezieht sich auf den Zugriffsmodifizierer, der bei Konstruktoren häufig public ist. Fälle, in denen ein Konstruktor einen anderen Zugriffsmodifizierer haben kann, werden in einem separaten Kurs behandelt;
  • ClassName: Der Name der Klasse, in der dieser Konstruktor erstellt wird;
  • ParameterType: Der Typ des Parameters, der im Konstruktor verwendet wird. Hier ist besondere Aufmerksamkeit erforderlich, da dieser Parameter denselben Typ wie das Feld in der Klasse haben sollte; Beispiel: Hat die Klasse zwei Parameter, String name und int age, sollte der Konstruktor dieselben Parameter enthalten (wenn alle Felder über den Konstruktor initialisiert werden sollen). Möchte man nur ein bestimmtes Klassenfeld, z. B. name, über den Konstruktor initialisieren, sollte nur ein Parameter mit demselben Typ und Namen wie das Feld in der Klasse verwendet werden;
  • Anschließend werden im Rumpf des Konstruktors die Werte den Klassenfeldern mithilfe der übergebenen Parameter zugewiesen.

Schlüsselwort "this"

Mit dem Schlüsselwort this kann auf das Klassenfeld verwiesen werden, in dessen Kontext dieses Schlüsselwort verwendet wird. Wenn beispielsweise eine Klasse zwei Felder name und age besitzt, kann innerhalb des Konstruktors oder einer Methode this.name geschrieben werden. Dadurch wird explizit auf das Klassenfeld und nicht auf die lokale Variable verwiesen, die als Parameter an den Konstruktor oder die Methode übergeben wurde. Auf diese Weise lassen sich die Klassenfelder im Konstruktor mit folgender Syntax initialisieren: this.name = name;.

Beispiel

Im Folgenden ein Beispiel für einen Konstruktor in einer Klasse, der alle Felder initialisiert, um das Konzept zu verdeutlichen:

Person.java

Person.java

copy
1234567891011
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } }

Wir haben eine Klasse namens Person mit drei Feldern. Jedes dieser Felder wurde mithilfe des Schlüsselworts this im Konstruktor hinzugefügt. Der Konstruktor initialisiert somit die Felder mit den Werten aus den Parametern. Nutzen wir diesen Konstruktor in der main-Methode, um zu sehen, dass die Felder mit den übergebenen Parametern initialisiert werden:

Main.java

Main.java

copy
123456789101112131415161718192021
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); } }

Wir initialisierten das Person-Objekt bob mithilfe des Konstruktors, indem wir name, age und gender als Parameter übergeben haben. Anschließend gaben wir seine Parameter auf dem Bildschirm aus und sehen, dass das Objekt die Feldwerte wie in den Konstruktorparametern angegeben besitzt.

Konstruktorüberladung

Der Konstruktor kann auch überladen werden und muss nicht die Initialisierung aller Klassenfelder abdecken. Zum Beispiel, wenn wir das Geschlecht von Alice nicht angeben möchten, können wir den Konstruktor überladen, sodass er nur 2 Parameter akzeptiert und die Felder damit initialisiert:

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); } }

Es lässt sich feststellen, dass ein Konstruktor, ähnlich wie eine Methode, überladen werden kann und unterschiedliche Anzahlen sowie Typen von Parametern akzeptieren kann.

Standardkonstruktor

Ein Standardkonstruktor ist ein Konstruktor, der keine Parameter entgegennimmt und keine Felder initialisiert. Er ist in allen Klassen standardmäßig vorhanden, sofern keine andere Art von Konstruktor definiert wurde, weshalb er als Standardkonstruktor bezeichnet wird. Jedes Mal, wenn wir ein Objekt einer Klasse erstellen, verwenden wir einen Konstruktor. Um den Standardkonstruktor zu nutzen, wenn bereits ein Konstruktor mit Parametern existiert, müssen wir zusätzlich einen leeren Konstruktor schreiben:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); Person john = new Person(); System.out.println("John's name: " + john.name + ", John's age: " + john.age); } }

Wir verwenden drei verschiedene Konstruktoren, um jeweils ein Person-Objekt zu initialisieren. Wie im letzten Beispiel zu sehen ist, hat John keinen Namen und kein Alter, da diese Felder für das Objekt nicht initialisiert wurden. Somit können wir den Konstruktor beliebig oft überladen und Objekte darüber erzeugen.

1. Welche der folgenden Aussagen über Konstruktoren ist richtig?

2. Was ist der Zweck eines Konstruktors in Java?

3. Welcher der folgenden Codeausschnitte zeigt die korrekte Erstellung eines parametrisierten Konstruktors?

question mark

Welche der folgenden Aussagen über Konstruktoren ist richtig?

Select the correct answer

question mark

Was ist der Zweck eines Konstruktors in Java?

Select the correct answer

question mark

Welcher der folgenden Codeausschnitte zeigt die korrekte Erstellung eines parametrisierten Konstruktors?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 6
some-alt