Direkt zum Hauptinhalt springen
eLearner.app
Modul 2 · Lektion 1 von 23/14 im Kurs~12 min
Lektionen des Moduls (1/2)

Klassen und Objekte

Java ist eine Sprache, die sich auf die objektorientierte Programmierung (OOP) konzentriert. In der OOP modellieren wir die reale Welt mithilfe von Objekten. Ein Objekt besitzt einen Zustand (die Daten) und Verhaltensweisen (die Aktionen).

Klassen und Objekte

  • Klasse: Es ist ein Modell (oder Blueprint), das die Eigenschaften und das Verhalten eines Objekttyps definiert.
  • Objekt: Es ist eine konkrete Instanz, die aus einer Klasse erstellt wurde.

Wenn beispielsweise Car die Klasse ist, ist Ihr Auto in der Garage das reale Objekt.

Instanzfelder und Konstruktoren

Die Daten innerhalb einer Klasse werden als Instanzfelder (oder Attribute) bezeichnet. Um den Zustand eines Objekts zum Zeitpunkt seiner Erstellung zu initialisieren, wird eine spezielle Methode namens Konstruktor verwendet.

Ein Konstruktor hat den gleichen Namen wie die Klasse und hat keinen Rückgabetyp (nicht einmal void).

Code
class Dog {
    // Campi istanza
    String name;
    int age;

    // Costruttore
    public Dog(String name, int age) {
        this.name = name; // 'this' fa riferimento al campo dell'oggetto corrente
        this.age = age;
    }
}

Ein Objekt mit new erstellen

Um ein Objekt im Speicher zu erstellen, verwenden wir das Schlüsselwort new gefolgt vom Konstruktor der Klasse:

Code
public class Main {
    public static void main(String[] args) {
        // Creazione di un oggetto Dog
        Dog myDog = new Dog("Fido", 3);

        // Accesso ai campi
        System.out.println(myDog.name + " ha " + myDog.age + " anni.");
    }
}

Die Referenz this

Das Schlüsselwort this in Java bezieht sich auf das aktuelle Objekt, auf dem der Konstruktor oder eine Methode ausgeführt wird. Es wird hauptsächlich verwendet, um Mehrdeutigkeiten zu vermeiden, wenn die Parameter des Konstruktors den gleichen Namen wie die Instanzfelder des Objekts haben (Variablenbeschattung):

Code
class User {
    String username;

    public User(String username) {
        this.username = username; // this.username è il campo istanza, username è il parametro
    }
}

Speicherallokation: Stack vs. Heap

Zu verstehen, wie Java Speicher allokiert, ist von grundlegender Bedeutung:

  1. Stack: Es ist ein schneller und organisierter Speicherbereich, in dem primitive Variablen und Referenzen auf Objekte (Speicheradressen) deklariert werden, die innerhalb der Methoden lokal sind.
  2. Heap: Es ist ein größerer und dynamischerer Speicherbereich, in dem die tatsächlichen Objekte allokiert werden (mit dem Schlüsselwort new).

Wenn wir Dog myDog = new Dog("Fido", 3); deklarieren:

  • Die Referenz myDog wird im Stack erstellt.
  • Das reale Objekt Dog mit seinen Daten wird im Heap erstellt.
  • Die Variable myDog zeigt auf die Position des Objekts im Heap.

Probier es selbst

Übung#java.m2.l1.e1
Versuche: 0Wird geladen…

Vervollständige die Klasse Person durch Hinzufügen des Feldes name und eines geeigneten Konstruktors. Erstelle dann in der main-Methode ein Person-Objekt namens p mit dem Namen Alice.

Editor wird geladen…
Hinweis anzeigen

Schreibe `String name;` in die Klasse, deklariere den Konstruktor `public Person(String name) { this.name = name; }` und instanziiere mit `new Person('Alice')`.

Lösung nach 3 Versuchen verfügbar

Übung#java.m2.l1.e2
Versuche: 0Wird geladen…

Erstelle eine Klasse Book mit den Feldern title (String) und pages (int), einem vollständigen Konstruktor und instanziiere in der main-Methode ein Buch namens b mit dem Titel Moby Dick und 600 Seiten.

Editor wird geladen…
Hinweis anzeigen

Denke daran, beide Felder in Book zu definieren, sie im Konstruktor mit `this.title = title;` und `this.pages = pages;` zuzuweisen und `new Book('Moby Dick', 600)` zu verwenden.

Lösung nach 3 Versuchen verfügbar

Übung#java.m2.l1.e3
Versuche: 0Wird geladen…

Erstelle eine Klasse Product mit den Feldern name (String) und price (double) und einem Konstruktor, der beide Felder initialisiert. Erstelle in der main-Methode ein Product-Objekt namens p mit dem Namen Laptop und dem Preis 999.99.

Editor wird geladen…
Hinweis anzeigen

Deklariere die Felder `String name;` und `double price;` in Product, weise sie im Konstruktor mit `this.name = name;` und `this.price = price;` zu und erstelle schließlich das Objekt in der main-Methode.

Lösung nach 3 Versuchen verfügbar