Eine Klasse ist ein Bauplan
Bisher lebte dein Code in Methoden, die schlichte Werte hin und her reichen. Eine Klasse erlaubt es dir, zusammengehörige Daten und das Verhalten, das auf ihnen arbeitet, in einem einzigen benannten Typ zu bündeln. Die Klasse ist der Bauplan; die eigentlichen Dinge, mit denen du arbeitest, sind die daraus erzeugten Objekte.
Eine Klasse deklariert zwei Arten von Mitgliedern: Felder (die Daten, die jedes Objekt hält) und Methoden (was jedes Objekt tun kann).
new Dog() baut ein Objekt im Speicher und gibt dir eine Referenz darauf. d.name und d.bark() greifen auf genau dieses Objekt zu.
Jedes Objekt hat seinen eigenen Zustand
Der ganze Sinn einer Klasse ist, dass du viele unabhängige Objekte herstellen kannst, von denen jedes seine eigenen Feldwerte trägt. Eines zu ändern berührt nie ein anderes.
rex und bella sind zwei getrennte Objekte. Jedes hat seinen eigenen name, also gibt jedes bark() einen anderen Wert aus. Diese objektbezogenen Daten nennt man Instanzzustand.
Felder und Methoden arbeiten zusammen
Methoden innerhalb einer Klasse können die eigenen Felder des Objekts direkt lesen und aktualisieren – ohne sie als Parameter übergeben zu müssen. Die Methode „lebt bereits auf“ dem Objekt, dessen Daten sie anfasst.
Beachte, dass increment() keine Argumente annimmt. Es arbeitet auf dem Feld, das zu dem Counter gehört, auf dem du es aufgerufen hast. Das ist der Unterschied zwischen einer Klassenmethode und einer freischwebenden statischen Methode: Die Methode hat ein implizites Objekt, auf das sie wirkt.
Das Schlüsselwort this
Innerhalb einer Methode ist this eine Referenz auf das Objekt, auf dem die Methode aufgerufen wurde. Meist brauchst du es nicht – count zu schreiben bedeutet bereits this.count. Doch this wird unverzichtbar, wenn ein Parametername mit einem Feldnamen kollidiert, was in Settern und Konstruktoren ständig vorkommt.
Ein häufiger Anfängerfehler ist, in move x = x; zu schreiben. Das weist den Parameter nur sich selbst zu und lässt das Feld unberührt – der Compiler warnt dich nicht, und dein Objekt behält stillschweigend seine alten Werte. this.x = x; ist das, was das Feld tatsächlich aktualisiert.
Standardwerte von Feldern und null-Referenzen
Wenn du ein Objekt erzeugst, bleiben seine Felder nicht als Müll zurück – Java initialisiert sie mit Standardwerten: 0 für Zahlen, false für boolean und null für Objektreferenzen wie String. Dieser null-Standardwert ist die Quelle eines klassischen Absturzes.
u.name ist null, weil es niemand gesetzt hat, also wirft der Aufruf von .length() darauf eine NullPointerException. Weise einem Objekt immer sinnvolle Werte zu, bevor du seine Felder verwendest – und genau dieses Problem lösen Konstruktoren.
Code rund um Klassen organisieren
Echte Programme modellieren ihre Domäne als Klassen, die Daten und die darauf wirkenden Operationen zusammenhalten. Hier hält eine einzige BankAccount-Klasse einen Kontostand und kontrolliert, wie er sich ändert:
Die Daten (balance) und die Regeln zu ihrer Änderung (deposit, withdraw) leben an einem Ort. Code an anderer Stelle bittet das Konto, etwas zu tun, statt direkt an seinen Zahlen herumzustochern – die Grundlage eines sauberen, wartbaren Designs.
Als Nächstes: Konstruktoren
Jedes Feld nach new von Hand zu setzen ist mühsam und leicht zu vergessen – und wie du gerade gesehen hast, hinterlässt ein vergessenes Feld ein null, das auf einen Absturz wartet. Ein Konstruktor erlaubt es dir, die Felder eines Objekts genau im Moment seiner Erzeugung zu verlangen und zu initialisieren, sodass ein BankAccount niemals ohne Eigentümer existieren kann. Darum geht es auf der nächsten Seite.
Häufig gestellte Fragen
Was ist eine Klasse in Java?
Eine Klasse ist ein Bauplan, der die Daten (Felder) und das Verhalten (Methoden) festlegt, die eine Art von Objekt haben wird. Die Klasse selbst ist nur die Vorlage – die eigentlichen Objekte erzeugst du daraus mit new. Eine Dog-Klasse beschreibt zum Beispiel, dass jeder Hund einen name hat und bark() kann, während jedes new Dog() ein eigener Hund mit eigenem Namen ist.
Was ist der Unterschied zwischen einer Klasse und einem Objekt in Java?
Eine Klasse ist die Definition; ein Objekt ist eine konkrete Instanz, die mit new aus dieser Definition gebaut wird. Eine einzige Person-Klasse kann viele Person-Objekte hervorbringen, von denen jedes seine eigenen Feldwerte hält. Stell dir die Klasse als Plätzchenform und die Objekte als die einzelnen Plätzchen vor: Die Felder eines Objekts zu ändern wirkt sich nie auf ein anderes aus.
Was bewirkt das Schlüsselwort this in einer Java-Klasse?
this verweist auf das aktuelle Objekt – die konkrete Instanz, deren Methode gerade läuft. Du verwendest es, um auf die eigenen Felder eines Objekts zuzugreifen, vor allem wenn ein Parameter denselben Namen wie ein Feld hat (this.name = name;). Ohne this würde die Zuweisung den Parameter nur sich selbst zuweisen und das Feld bliebe unverändert.