Menu
Coddy logo textTech

Instanz- vs. statische Variablen

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

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

Aber was ist, wenn Sie Daten benötigen, die über alle Objekte hinweg geteilt 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 - eindeutig pro Student
    private static int totalCount; // Statische Variable - wird 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 Sie mehrere Studenten erstellen, hat jeder seinen eigenen name, aber alle teilen sich denselben totalCount:

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

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

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

challenge icon

Aufgabe

Einfach

Erstelle 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 einzigartig
    • Eine Instanzvariable price (double) – für jedes Buch einzigartig
    • Eine statische Variable totalBooks (int) – wird von allen Book-Objekten gemeinsam genutzt und erfasst, wie viele Bücher erstellt wurden
    • Einen Konstruktor, der den Titel und den Preis entgegennimmt und die Gesamtzahl der Bücher erhöht
    • Einen Getter getTitle() für den Titel
    • Einen Getter 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 alle drei Bücher erstellt wurden, gib vier Zeilen aus:
    • Den Titel und den Preis jedes Buches im Format: [title]: $[price] (Preis 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 unter Verwendung der obigen Eingaben
        
        // TODO: Gib Titel und Preis jedes Buches im Format [title]: $[price] aus
        // Verwende String.format("%.2f", price), um den Preis auf 2 Dezimalstellen zu formatieren
        
        // TODO: Gib die Gesamtzahl der Bücher mithilfe der statischen Methode aus
        // Format: Total books: [count]
        // Denke daran, auf die statische Methode über den Klassennamen zuzugreifen: 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