Java Einführungs-Seminar
ratio 1
ratio 2

Klassen

Klassen 

Klassen sind die Grundbausteine der gesamten Java-Architektur. Klassen sind private Datentypen, die in sich sowohl die notwendgen Daten als auch zugehörgen Operationen beinhalten. Eine Klasse bildet eine Kapsel, die die privaten Teile vor einem unkontrollierten Zugang von außen schützt. Diese Kapselung ist eine der drei grundlegenden Ideen der OOP (Objekt-orientierte Programmierung):

Die einzelnen Daten nennt man die Eigenschaften der Klasse und zusammen bilden sie den momentanen Status. Eigenschaften gibt es in zwei Varianten. Zumeist werden Eigenschaften in jeder neuen Variablen der KLasse (den Objekten) angelegt. Eine Eigenschaft "zaehler" würde als in 10 Objekten je einmal vorkommen. Daneben gibte s Klasseneigenschaften, die der Klasse zugeordet werden und auch dann existieren, wenn noch keine Objekte angelegt wurden. 

Die Operationen werden durch spezielle Unterprogramme, die Methoden, realisiert. Methoden dürfen auf alle Elemente der Klasse, Eigenschaften und Methoden, zugreifen. Man unterscheidet wieder zwischen Methoden, die ein Objekt bearbeiten, und Methoden, die Klaseneigenschafen bearbeiten. Objektmethoden erhalten bei ihrem Ablauf eine Bindung an das Objekt, für das sie gerufen wurrden. Die Bindung wird durch die Referenz "this" realisiert.

Objekte

Alle Datentypen, die nicht in der Liste der Basisdatentypen aufgeführt sind, sind referenzierte Datentypen. 

Man definiert ein Objekt einer Klasse (und auch ein Feld eines Basisdatentyps) in zwei Schritten 

  1. Definition einer Referenzvariablen
  2. Dynamisches Allokieren des Objektspeicherplatzes mit Initialisierung mit "new".
 Eine Klasse wird durch das Schlüsselwort "class" und einem zugehörigen Block definiert. Der Block wird nicht (wie in C++) durch einen ";" abgeschlossen. 
In der Klasse werden Eigenschaften und Methoden definiert. Beide können mit "static" als Attribut der Klasse zugeordent werden oder einem Objekt, das mit Hilfe der Klasse allokiert wird.
Zum Anlegen und Zerstören von Objekten gibt es untersttzende Methoden: Kontruktoren und Destruktoren (finalizer).

Vererbung

Klassen können als Sub-Klassen definier werden. Eine Sub-Klasse ist eine Spezialisierung einer Super-Klasse. Die abgeleitete Sub-Klasse erbt dabei die Daten und das Verhalten der Superklasse.

Konstruktoren

  • In einer Klasse können Konstruktoren definiert werden. Abhängig vom verwendeten Parametersatz wird dann beim Anlegen eines Objektes der Konstruktor gerufen. In den meisten Fällen wird dies beim new-Operator erfolgen. Klassen existieren ohne Konstruktorlauf.
  • Konstruktoren schreibt man fast wie normale Methoden, nur daß sie keinen Rückgabewert besitzen. Ihre jeweils erste Aufgabe ist es, den jeweils übergeordneten Konstruktor zu rufen 
  • Im Funktionsblock eines Konstruktors gibt es zwei unterschiedliche Abschnitte. Der erste Abschnitt kann explizite Aufrufe von Konstruktoren der eigenen Klasse oder Konstruktoren der Superklasse enthalten. Wird kein Konstruktorauffruf für die Superklasse explizit angegegebn, erfolgt implizit automatisch ein Aufruf des Defaultkonstruktors für die Superklasse. Der eigentliche Code des Konstruktors im zweiten Abschnitt kann sich daher auf eine vorhergegangene Initialisierung der übergeordneten Klassen verlassen.
  • Schreibt man in einer Klasse keinen Konstruktor, wird ein automatischer Default-Konstruktor verwendet, der nichts anderes tut, als den Konstruktor der Superklasse zu rufen.Ist mindestens ein Konstruktor vorhanden, muß ein Konstruktor der Klasse benutzt werden.

Destruktoren

  • In Java  werden nur selten Destruktoren geschrieben. In anderern Sprachen wird oft dynamischer Speicher im Destruktor zurückgegeben. Wegen der automatischen Speicherverwatung ist dies in Java nicht notwendig. 
  • Der Name ist "finalize()". Die letzte Aufgabe eines Destruktors ist der Aufruf des übergeordneten Destruktors mit super.finalize().

Das Seminar wurde entwickelt von Walter Herglotz, München, 1999. Alle Rechte sind vorbehalten. 
© Copyright "walter digital", München, Walter Herglotz, 1999-2000