Menu
CoddyTech

Instanz- vs. statische Variablen

Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy. Lektion 15 von 87.

Bisher gehört jedes von uns erstellte Feld zu einem bestimmten Objekt. Jedes BankAccount hat sein eigenes balance, und jedes Product hat seinen eigenen name. Dies sind Instanzvariablen – sie existieren für jede Instanz einer Klasse separat.

Aber was ist, wenn du Daten benötigst, die von allen Objekten gemeinsam genutzt werden? Hier kommen statische Variablen (auch Klassenvariablen genannt) ins Spiel. Eine statische Variable gehört zur Klasse selbst, nicht zu einem bestimmten Objekt.

public class Student {
    private String name;           // Instanzvariable – einzigartig pro Student
    private static int totalCount; // Statische Variable – von allen Studenten geteilt
    public Student(String name) {
        this.name = name;
        totalCount++;  // Erhöht den gemeinsamen Zähler
    }
    public static int getTotalCount() {
        return totalCount;
    }
}

Wenn du mehrere Studierende erstellst, hat jeder seinen eigenen name, aber sie teilen sich alle denselben totalCount:

Student s1 = new Student("Alice");
Student s2 = new Student("Bob");
System.out.println(Student.getTotalCount());  // Ausgabe: 2

Beachte, wie wir über den Klassennamen (Student.getTotalCount()) auf die statische Variable zugreifen und nicht über ein Objekt. Dies unterstreicht, dass statische Member zur Klasse gehören und nicht zu Instanzen.

Verwende Instanzvariablen für Daten, die zwischen Objekten variieren (wie der Name eines Schülers). Verwende statische Variablen für Daten, die gemeinsam genutzt werden sollen (wie das Zählen, wie viele Objekte existieren).

challenge icon

Aufgabe

Einfach

Erstellen wir ein Book-Inventarsystem, das sowohl die Details einzelner Bücher als auch die Gesamtzahl der Bücher in deiner gesamten Sammlung mithilfe von Instanz- und statischen Variablen erfasst.

Du erstellst zwei Dateien, um deinen Code zu organisieren:

  • Book.java: Erstelle eine Book-Klasse, die Informationen zu einzelnen Büchern erfasst und gleichzeitig die Anzahl aller jemals erstellten Bücher speichert:
    • Eine Instanzvariable title (String) – für jedes Buch eindeutig
    • Eine Instanzvariable price (double) – für jedes Buch eindeutig
    • Eine statische Variable totalBooks (int) – von allen Book-Objekten gemeinsam genutzt; sie erfasst, wie viele Bücher erstellt wurden
    • Einen Konstruktor, der den Titel und den Preis entgegennimmt und die Gesamtzahl der Bücher erhöht
    • Eine Getter-Methode getTitle() für den Titel
    • Eine Getter-Methode getPrice() für den Preis
    • Eine statische Methode getTotalBooks(), die die Gesamtzahl der erstellten Bücher zurückgibt
  • Main.java: Erstelle mehrere Book-Objekte und zeige, wie der statische Zähler alle Instanzen erfasst. Du erhältst drei Buchtitel und drei Preise als Eingaben. Nachdem du alle drei Bücher erstellt hast, gib vier Zeilen aus:
    • Den Titel und den Preis jedes Buches im Format: [title]: $[price] (der Preis wird mit 2 Dezimalstellen formatiert)
    • Die Gesamtzahl der Bücher mithilfe der statischen Methode: Total books: [count]

Du erhältst sechs Eingaben in dieser Reihenfolge: title1, price1, title2, price2, title3, price3.

Denke daran, auf die statische Methode über den Klassennamen (Book.getTotalBooks()) und nicht über eine Objektinstanz zuzugreifen. Verwende zur Formatierung der Preise String.format("%.2f", price).

Probier es selbst

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Eingaben für drei Bücher lesen
        String title1 = scanner.nextLine();
        double price1 = Double.parseDouble(scanner.nextLine());
        String title2 = scanner.nextLine();
        double price2 = Double.parseDouble(scanner.nextLine());
        String title3 = scanner.nextLine();
        double price3 = Double.parseDouble(scanner.nextLine());
        
        // TODO: Erstelle drei Book-Objekte mit den obigen Eingaben
        
        // TODO: Gib den Titel und Preis jedes Buches im Format aus: [title]: $[price]
        // Verwende String.format("%.2f", price) zur Formatierung des Preises auf 2 Dezimalstellen
        
        // TODO: Gib die Gesamtzahl der Bücher mit der statischen Methode aus
        // Format: Total books: [count]
        // Denke daran, die statische Methode über den Klassennamen aufzurufen: Book.getTotalBooks()
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Java-Compiler