Java-Kurs: Klassen

Willemers Informatik-Ecke

Zurück zu Java

Definition einer Klasse

Eine Klasse beinhaltet Daten, die als Attribute bezeichnet werden, und Methoden, die diese bearbeiten. Eine öffentliche Klasse ist immer in einer eigenen Datei definiert, deren Namen aus dem der Klasse und der Erweiterung .java zusammengesetzt ist. Nach der Übersetzung durch den Compiler hat das Ergebnis die Extension .class.

Beispielsweise würde die Klasse Datum in der Datei Datum.java realisiert und könnte beispielsweise folgenden Code enthalten.

class Datum {
  int tag, monat, jahr;

  int getTag() {
    return tag;
  }

  void setTag(int tag) {
    tag = tag;
  }
}

Objekte entstehen, Objekte vergehen

Nun kann ein Objekt der Klasse Datum definiert werden. Es wird wie jede andere Variable angelegt. Allerdings enthält eine Objektvariable nicht etwa den Wert selbst, sondern ist eine Referenz auf Speicher, den das Java Runtime System verwaltet. Damit die Referenz zu diesem Speicher kommt, muss der Befehl new gegeben werden.

class TestDatum {
    static public void main(String[] args) {
        Datum meinGeburtstag = null;
        meinGeburtstag = new Datum();
    }
}

Hat eine Referenz noch kein zugehöriges Objekt, solle man es mit null vorbesetzen. Objekte, die keine Referenz mehr besitzen, werden vom Runtime System mit der sogenannten Garbage Collection entsorgt. Dies ist ein niedrig priorisierter Thread im Hintergrund, der prüft, ob ein herrenloses Objekt entsorgt werden kann.

Zugriff auf die Objektelemente

Auf die Elemente eines Objekts wird zugegriffen, indem erst der Objektname, dann ein Punkt und anschließend das Attribut (die Variable) oder die Methode genannt wird.

Privatsphäre

Member und Methoden, die public deklariert sind, können von anderen Klassen direkt zugegriffen werden. Soll das Element nur für interne Zwecke dienen, wird es als private deklariert.

Statisches

Das Attribut static hat die Bedeutung, dass etwas exakt einmal existiert und dies vom Laden der Klasse bis zum Ende des Programms.

Statische Membervariablen existieren also nicht für jedes Objekt neu, sondern einmal für die gesamte Klasse. Solche Variablen werden beispielsweise verwendet, um die Anzahl der angelegten Objekte einer Klasse zu zählen. Der Zugriff auf diese Objekte erfolgt über den Klassennamen statt über einen Variablennamen erfolgen. Immerhin bedarf die Existenz einer statischen Variablen nicht einer Instanz.

Konstruktor

Der Konstruktor ist eine Methode, die bei Instanzierung (new) einer Klasse aufgerufen wird. Er trägt den Namen der Klasse. Der Konstruktor hat keinerlei Rückgabetyp, nicht einmal void. Die Aufgabe des Konstruktors ist es, ein Objekt zu initialisieren.

Der Standardkonstruktor hat keine Parameter. Im Konstruktor findet die Initialisierung statt, also alle die Vorgänge, die genau einmal zu Start erledigt werden sollten, bevor die Variable benutzt wird. Da die Variable sich quasi selbst vorbereitet, werden Initialisierungsfehler vermieden und der Code wird stabiler.

Ein Konstruktor trägt den Namen der Klasse und hat keinen Rückgabewert. Der Standarkonstruktor hat keine Parameter. Es kann weitere (überladene) Konstruktoren mit Parametern geben. Im folgenden Beispiel werden im Standardkonstruktor die Variablen vorbelegt. Im Konstruktor mit dem Stringparameter wird der Name des Autos beim new bereits festgelegt.

public class Auto {
  public String name;
  private int PS;

  public Auto()
  {
    PS = 1;
    name="";
  }

  public Auto(String pName)
  {
    name = pName;
    PS = 1;
  }

  public int getPS()
  {
    return PS;
  }
}
...
Auto meinR4 = new Auto("Renault R4");

Durch Weglassen des Standardkonstruktors kann verhindert werden, dass ein Auto ohne Namen erzeugt wird.

Statische Attribute und Methoden

Man erreicht alle Attribute und Methoden einer Klasse über das Objekt. Allerdings gibt es eine Ausnahme: Statische Attribute und Methoden können über ihren Klassennamen aufgerufen werden. So wird bei Verwendung von System.out.println die Methode println als statische Methode angesprochen, die über die Klasse System aufgerufen wird. Gleiches gilt für die statische Varialbe bzw. Konstante Short.MAX_VALUE. In beiden Fällen werden die Klassennamen verwendet und nicht ein Objekt der Klasse angelegt.

Statisch heißt bei Attributen, dass die Variable exakt einmal pro Klasse existiert. Sie wird also nicht für jedes Objekt neu angelegt, sondern sie existiert bereits vor dem ersten Anlegen eines Objekts und es wird immer nur das eine Exemplar geben. Mit statischen Attributen können beispielsweise Zähler für Objekte implementiert werden.

Statische Methoden greifen nur auf statische Attribute zu und rufen nur andere statische Methoden auf. So ist gewährleistet, dass auch sie aufgerufen werden können, ohne dass ein Objekt existiert.

Private Attribute, set und get

Die Attribute einer Klasse sollten möglichst als privat deklariert werden. Damit sie von außen gelesen werden können, schreibt man eine get-Methode und um sie zu verändern, eine set-Methode.
class Datum {
   private int tag;
   void setTag(int paraTag)  {
       tag = paraTag;
   }
   int getTag() {
       return tag;
   }
   ...
}
Dieses etwas umständliche Vorghen sichert der Klasse die Kontrolle über die Attribute. Später einmal kann es erforderlich sein, zu prüfen, ob der Tag wirklich im Bereich von 1 bis 31 ist. Vielleicht will man auch sicherstellen, dass niemand den 30. Februar erfindet.

Darüber hinaus kann eine Datumsklasse, die beispielsweise den Wochtentag eines Datums speichert, diesen ohne Neuberechung zurückgeben, wenn die Klasse kontrolliert, wann der Tag, der Monat oder das Jahr geändert wurde und damit der bisherige Wochentag ungültig wird.


Homepage - Java (C) Copyright 2001, 2011 Arnold Willemer