Was genau ist die Funktion eines Konstruktors? Was genau machen “Getter” und “Setter”?

Der Konstruktor ist eine Methode, die beim Erzeugen eines Objekts (new, …) aufgerufen wird. Er dient oft zum Initialisieren der Instanzvariablen.

Getter und Setter sind Methoden, die verwendet werden, um Eigenschaften des Objekts abzufragen oder zu setzen. Oft werden sie für den Zugriff auf private Instanzvariablen verwendet. Bei einem gekapselte Zugriff über Methoden besteht die Möglichkeit die Gültigkeit der übergebenen Parameter zu überprüfen,

Beispiel:
Die Klasse Item dient zur Verwaltung von Gegenständen / Artikeln. Jeder Artikel hat einen Namen und eine Anzahl. Der Name muss eine Mindestlänge besitzen. Die Anzahl eines Artikels darf nicht negativ sein.

class Item {
    private String name;
    private int count;

    public Item(String name) {
        this(name, 0);
    }

    public Item(String name, int count) {
        setName(name);
        setCount(count);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if (name == null || name.length() < 3) {
            throw new IllegalArgumentException("Name muss mindestens 3 Zeichen haben.");
        }
        this.name = name;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        if (count < 0) {
            throw new IllegalArgumentException("Anzahl darf nicht negativ sein.");
        }
        this.count = count;
    }
}

Es gibt zwei Konstruktoren. Der Konstruktor in Zeile 5 wird verwendet, um einen Artikel mit der Stückzahl 0 zu erzeugen. Mit this(name, 0) in Zeile 6 wird der Konstruktor in Zeile 9 aufgerufen. Dieser setzt die Attribute nicht direkt, sondern delegiert das Setzen der Instanzvariablen an die Setter in Zeile 18 und 29.
In Zeile 19 und 30 wird überprüft, ob die zu setzenden Attribute den oben beschriebenen Regeln entsprechen.