Im Unterschied zur Klassenmethode muss eine Objektmethode an einem konkret instanziierten Objekt aufgerufen werden, dies ist bei Klassenmethoden nicht der Fall.
Bislang haben wir bei der Definition unserer main-Methoden immer das Schlüsselwort static vorangestellt. Damit erreichen wir, dass eine Klassenmethode angelegt wird. Selbes gilt auch für Attribute durch das Voranstellen von static.
Beispiel
Am Besten schauen wir uns den Unterschied zwischen Klassenmethoden und Objektmethoden an einem konkreten Beispiel an:
public class Auto {
// Klassenattribute
static int anzahlRaeder = 4;
// Objektattribute
String marke, farbe;
double verbrauch;
// Klassenmethode
static void wieVieleRaeder() {
System.out.println("Ein Auto hat " + anzahlRaeder + " Räder!");
}
// Objektmethoden
void fahren() {
System.out.print(this.marke + " fährt, ");
System.out.println("brumm brumm brumm...");
}
// Konstruktor
public Auto(String marke, String farbe, double verbrauch) {
this.marke = marke;
this.farbe = farbe;
this.verbrauch = verbrauch;
}
// Main Methode
public static void main(String[] args) {
// Objekte instanziieren
Auto pkw1 = new Auto("Audi", "schwarz", 5.6);
Auto pkw2 = new Auto("BMW", "weiß", 6.3);
// Objektmethoden aufrufen
pkw1.fahren();
pkw2.fahren();
// Klassenmethode aufrufen
wieVieleRaeder();
}
}Wir definieren ein Objekt Auto über die Attribute:
- Marke
- Farbe
- Verbrauch
Diese Attribute können pro Auto mit einem objektspezifischen Wert belegt werden, dies erfolgt mit dem Konstruktor.
Nach der Instanziierung eines Objekts können wir die Objektmethode fahren() an einem konkreten Objekt aufrufen und so über this auch auf die Objektattribute zugreifen.
Audi fährt, brumm brumm brumm...
BMW fährt, brumm brumm brumm...Die Gesamtheit aller Autos lässt sich über die Anzahl der Räder beschreiben, die Belegung gilt über alle Objekte hinweg. Daher wird anzahlRaeder() als static definiert.
Ein Auto hat 4 Räder!Aus einer Klassenmethode hat man keinen Zugriff auf Attribute eines Objekts, d.h. this funktioniert nur in Objektmethoden.

Mit dem nun gewonnenen Wissen über Objetmethoden können wir die im Beitrag Konstruktor geschriebene Klasse Mitarbeiter vereinfachen. Die Ausgaben auf der Konsole können wir in eine Methode print() verlagern und somit die main-Methode vereinfachen und unseren Code übersichtlicher gestalten. Hierfür muss nur das konkrete Objekt mitarbeiter1 durch die this-Referenz ausgetauscht werden.
public class Mitarbeiter {
// Attribute
int personalnummer;
String name, vorname, abteilung;
// Objektmethode
void print() {
System.out.print("Personalnummer: ");
System.out.println(this.personalnummer);
System.out.print("Name: ");
System.out.println(this.name);
System.out.print("Vorname: ");
System.out.println(this.vorname);
System.out.print("Abteilung: ");
System.out.println(this.abteilung);
}
// Standardkonstruktor
public Mitarbeiter() { }
// Eigener Konstruktor
public Mitarbeiter(int personalnummer, String name, String vorname, String abteilung) {
this.personalnummer = personalnummer;
this.name = name;
this.vorname = vorname;
this.abteilung = abteilung;
}
public static void main(String[] args) {
// Neuen Mitarbeiter instanziieren
Mitarbeiter mitarbeiter1 = new Mitarbeiter(123, "Müller", "Hans", "Vertrieb");
// Ausgabe der Attribute
mitarbeiter1.print();
}
}Personalnummer: 123
Name: Müller
Vorname: Hans
Abteilung: VertriebDie Ausgabe auf der Konsole bleibt unverändert zur bisherigen Implementierung.
Im nächsten Beitrag werden wir mit Getter- und Settermethoden einige Objektmethoden schreiben und verwenden.
