CodeGym /Kurse /JAVA 25 SELF /Erzeugen von Objekten mit

Erzeugen von Objekten mit new

JAVA 25 SELF
Level 14 , Lektion 3
Verfügbar

1. Das Schlüsselwort new

In Java verwendet man das Schlüsselwort new, um ein Objekt einer beliebigen Klasse zu erzeugen. Dieses „magische“ Wort weist die JVM an: Speicher für das neue Objekt zu reservieren und seinen Konstruktor aufzurufen.

Analogie:
Wenn eine Klasse der Bauplan eines Autos ist, dann ist new die Fabrik, die nach diesem Plan ein echtes Auto zusammenbaut.

Beispiel

Person vasya = new Person();

Was hier passiert:

  1. new Person() – es wird ein neues Objekt des Typs Person erzeugt (der Konstruktor wird aufgerufen).
  2. vasya – die Variable, die die Referenz auf das erzeugte Objekt speichert.

Wie das im Speicher aussieht

Wenn Sie Person vasya = new Person(); schreiben, wird im Speicher ein Bereich für die Felder des Objekts reserviert (z. B. Name und Alter), und die Variable vasya enthält die Adresse dieses Bereichs – eine Referenz.

Achtung:
Wenn Sie new weglassen, ist die Variable nur eine Referenz, die auf nichts zeigt (null). Der Versuch, auf Felder oder Methoden eines solchen „leeren“ Objekts zuzugreifen, führt zu einer NullPointerException.

2. Konstruktoraufruf: Wie funktioniert das?

Ein Konstruktor ist eine spezielle Methode, die beim Erzeugen eines Objekts aufgerufen wird und dessen Felder initialisiert – sie bereitet die Instanz auf die Arbeit vor.

Syntax

ImyaKlassa imyaPeremennoy = new ImyaKlassa(argumenty);
  • Wenn eine Klasse einen Konstruktor mit Parametern hat, müssen diese unbedingt übergeben werden.
  • Wenn der Konstruktor keine Parameter hat (oder der Standardkonstruktor verwendet wird), bleiben die Klammern leer.

Beispiel: Konstruktor mit Parametern

public class Person {
    String name;
    int age;

    // Konstruktor mit Parametern
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Wir erzeugen ein Objekt:

Person petya = new Person("Petya", 25);

Die Werte "Petya" und 25 werden in die Felder name und age des neuen Objekts geschrieben.

Konstruktor ohne Parameter

public Person() {
    this.name = "Unbenannt";
    this.age = 0;
}

Jetzt kann man schreiben:

Person mysteryMan = new Person(); // name="Unbenannt", age=0

3. Mit Objekten arbeiten: Felder und Methoden

Nach dem Erzeugen eines Objekts greifen Sie über den Punktoperator (.) auf seine Felder und Methoden zu:

petya.name = "Pyotr";
System.out.println(petya.name); // Pyotr

petya.sayHello();

Wenn die Klasse eine Methode hat:

public void sayHello() {
    System.out.println("Hallo, ich heiße " + name + "!");
}

Dann gibt der Aufruf petya.sayHello(); aus: Hallo, ich heiße Pyotr!

Beispiel: vollständige Klasse

public class Person {
    String name;
    int age;

    public Person(String name, int age) { // Konstruktor
        this.name = name;
        this.age = age;
    }

    public void sayHello() { // Methode
        System.out.println("Hallo, ich heiße " + name + "!");
    }
}

Verwendung:

Person vasya = new Person("Vasya", 30);
vasya.sayHello(); // Hallo, ich heiße Vasya!

4. Referenzvariablen: Was ist das?

Eine Variable vom Klassentyp in Java ist eine Referenz auf ein Objekt im Speicher, nicht das Objekt selbst.

Demonstration

Person vasya = new Person("Vasya", 30);
Person anotherVasya = vasya;

Nun zeigen sowohl vasya als auch anotherVasya auf dasselbe Objekt im Speicher. Wenn Sie ein Feld über eine Variable ändern, ändert es sich auch für die andere:

anotherVasya.age = 31;
System.out.println(vasya.age); // 31

Wichtiger Punkt:
Wenn Sie zwei verschiedene Objekte erzeugen, sind sie unabhängig:

Person petya = new Person("Petya", 25);
Person masha = new Person("Masha", 22);

petya.age = 99;
System.out.println(masha.age); // 22 (unverändert!)

5. Beispiel: Erzeugen und Verwenden mehrerer Objekte

Fügen wir der Anwendung mehrere Objekte hinzu. Nehmen wir die Klasse Person, und erzeugen wir in main mehrere Personen und geben ihre Begrüßungen aus.

Klasse Person

public class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void sayHello() {
        System.out.println("Hallo, ich heiße " + name + ", ich bin " + age + " Jahre alt!");
    }
}

Verwendung in main

public class Main {
    public static void main(String[] args) {
        Person vasya = new Person("Vasya", 25);
        Person petya = new Person("Petya", 27);

        vasya.sayHello(); // Hallo, ich heiße Vasya, ich bin 25 Jahre alt!
        petya.sayHello(); // Hallo, ich heiße Petya, ich bin 27 Jahre alt!

        // Demonstration der Unabhängigkeit von Objekten:
        vasya.age = 100;
        vasya.sayHello(); // Hallo, ich heiße Vasya, ich bin 100 Jahre alt!
        petya.sayHello(); // Hallo, ich heiße Petya, ich bin 27 Jahre alt!
    }
}

Programmausgabe:

Hallo, ich heiße Vasya, ich bin 25 Jahre alt!
Hallo, ich heiße Petya, ich bin 27 Jahre alt!
Hallo, ich heiße Vasya, ich bin 100 Jahre alt!
Hallo, ich heiße Petya, ich bin 27 Jahre alt!

6. Häufige Fehler beim Erzeugen von Objekten

Fehler Nr. 1: new vergessen

Person vasya;
vasya.name = "Vasya"; // NullPointerException!

Die Variable vasya verweist auf kein Objekt (null). Das Objekt muss unbedingt mit new erzeugt werden.

Fehler Nr. 2: Parameter für den Konstruktor nicht übergeben

Person petya = new Person(); // Kompilierfehler, wenn es keinen parameterlosen Konstruktor gibt

Wenn die Klasse nur einen Konstruktor mit Parametern hat, müssen diese beim Erzeugen des Objekts angegeben werden.

Fehler Nr. 3: Denken, dass die Variable das Objekt selbst enthält

Person a = new Person("Anya", 20);
Person b = a;
b.age = 99;
System.out.println(a.age); // 99, weil a und b Referenzen auf dasselbe Objekt sind!

In Java ist eine Variable eines Klassentyps immer eine Referenz, nicht das Objekt selbst.

Fehler Nr. 4: Felder eines Objekts ändern und erwarten, dass sich das andere nicht ändert

Person x = new Person("X", 1);
Person y = x;
x.age = 42;
System.out.println(y.age); // 42

Wenn Sie zwei unabhängige Objekte brauchen – erzeugen Sie sie getrennt!

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION