← SEARCHABLE ARCHIVE
Java · 2026-07-22

Java von den Grundlagen bis zum Profi — Folge 3

Entwerfen von Objekten, Kapselung und unveränderlichen Werten

INTERACTIVE READING MODE →

Die in diesem Blog verfassten Artikel wurden mit dem Ziel erstellt, zu unterrichten. Außerdem können die Informationen im Artikel falsch sein, also seien Sie bitte vorsichtig.

Ein Objekt bindet verwandte Zustände und Verhaltensweisen innerhalb einer einzigen Grenze. Bei der Kapselung geht es nicht darum, Felder bedingungslos auszublenden, sondern darum, Regeln in eine Klasse einzufügen, sodass nur gültige Zustände erstellt werden können.

Erstellen eines gültigen Objekts mit einem Konstruktor

public final class Player {
    private final String name;
    private int health;

    public Player(String name, int health) {
        if (name == null || name.isBlank()) {
            throw new IllegalArgumentException("name is required");
        }

        this.name = name;
        this.health = Math.max(0, health);
    }

    public void takeDamage(int amount) {
        if (amount > 0) {
            health = Math.max(0, health - amount);
        }
    }

    public int getHealth() {
        return health;
    }
}

Das Äußere kann die Gesundheit nicht direkt verändern; es ändert es nur durch eine Regel namens takeDamage. Ein Objekt, dessen Konstruktor abgeschlossen wurde, erfüllt die Bedingung, dass sein Name und sein Zustand gültig sind.

Referenzen können auf dasselbe Objekt verweisen

Player first = new Player("Rose", 100);
Player second = first;

second.takeDamage(20);
System.out.println(first.getHealth()); // 80

Im zweiten Fall wurde das Objekt nicht kopiert, aber die Referenz, die auf denselben Player verweist, wurde kopiert. Wenn unabhängige Kopien erforderlich sind, müssen Sie explizit festlegen, welche Felder kopiert werden.

Unveränderliche Werte schaffen

public final class ItemKey {
    private final int id;
    private final String grade;

    public ItemKey(int id, String grade) {
        this.id = id;
        this.grade = grade;
    }
}

Wenn Sie ein Feld endgültig machen und keine Änderungsmethode angeben, ändert sich sein Status nach der Erstellung nicht. Wenn es sich bei dem Feld jedoch um eine veränderbare Sammlung handelt, sollten Sie defensives Kopieren oder schreibgeschützte Ansichten in Betracht ziehen.

Beim Objektdesign geht es nicht darum, sowohl Getter als auch Setter zu erstellen. Wer den Zustand ändern kann und welche Bedingungen immer eingehalten werden müssen, wird durch öffentliche Methoden der Klasse ausgedrückt.