EMZETT.
Login

Classes

Kurz: Der Bauplan für Objekte — definiert, welche Felder (Zustand) und Methoden (Verhalten) Instanzen dieser Klasse haben.

Genauer: Eine Klasse selbst ist noch kein konkretes Objekt, sondern die Vorlage, aus der über new beliebig viele Objects erzeugt werden können, die jeweils eigene Werte für die Felder tragen. In Java lebt pro Datei üblicherweise genau eine öffentliche Klasse, benannt wie die Datei selbst.

Im Detail

public class Konto {
    // Felder = Zustand pro Objekt
    private String inhaber;
    private double saldo;
 
    // Konstruktor - läuft bei jedem "new Konto(...)"
    public Konto(String inhaber, double startguthaben) {
        this.inhaber = inhaber;
        this.saldo = startguthaben;
    }
 
    // Methoden = Verhalten
    public void einzahlen(double betrag) {
        this.saldo += betrag;
    }
 
    public double getSaldo() {
        return saldo;
    }
}
 
Konto meins = new Konto("Anna", 100.0);
Konto deins = new Konto("Ben", 50.0);
meins.einzahlen(20.0); // wirkt nur auf "meins", "deins" bleibt unberührt

Jede Instanz (jedes über new erzeugte Objekt) bekommt einen eigenen, unabhängigen Satz der Instanzfelder — meins und deins haben getrennte saldo-Werte, obwohl beide von derselben Klasse Konto stammen. Felder oder Methoden, die mit static markiert sind, gehören dagegen der Klasse selbst, nicht einer einzelnen Instanz, und werden von allen Objekten gemeinsam geteilt (z. B. ein Zähler, wie viele Konto-Objekte insgesamt erzeugt wurden). Die Konvention “eine öffentliche Klasse pro Datei, Dateiname = Klassenname” ist in Java kein Stilratschlag, sondern eine vom Compiler erzwungene Regel.

static: geteilter Zustand auf Klassenebene

class Konto {
    private static int anzahlKonten = 0; // gehört der Klasse, nicht einer Instanz
    private String inhaber;
 
    Konto(String inhaber) {
        this.inhaber = inhaber;
        anzahlKonten++; // jedes neue Konto erhöht den gemeinsamen Zähler
    }
 
    static int getAnzahlKonten() {
        return anzahlKonten; // Aufruf über Konto.getAnzahlKonten(), nicht über eine Instanz
    }
}

static-Felder existieren genau einmal pro Klasse, unabhängig davon, wie viele Objekte erzeugt werden — ein typischer Einsatzzweck sind Zähler, Konfigurationswerte oder Utility-Methoden, die keinen eigenen Objektzustand brauchen (z. B. Math.max()).

Zugriffsmodifizierer als Kapselungswerkzeug

Felder werden in gut strukturiertem Java-Code fast immer private deklariert (siehe Modifiers) und nur über öffentliche Getter/Setter-Methoden zugänglich gemacht — das nennt man Encapsulation und ist eines der vier Grundprinzipien der OOP. Es erlaubt der Klasse, ihre interne Datenrepräsentation später zu ändern, ohne dass Code außerhalb der Klasse angepasst werden muss.

Klassen vs. Instanzen: eine häufige Verwechslung

Einsteiger verwechseln oft die Klasse selbst mit einem konkreten Objekt: Konto ist nur der Bauplan — er existiert genau einmal im kompilierten Programm. meins und deins sind zwei UNABHÄNGIGE Objekte, die nach diesem Bauplan erzeugt wurden und jeweils eigenen Speicher für ihre Felder belegen.

Siehe auch: Objects, Constructors, Methods, OOP, Modifiers