Java & Webapplikationen

6.1.3 Methoden

Um das Verhalten eines Objekts zu definieren, erstellt man geeignete Methoden. Methoden sind Stücke von Programmcode, die in Java nur innerhalb von Klassen existieren können. Sie gehören zu einem Objekt und haben Zugriff auf dessen Variablen. Methoden können auch wieder Methoden (anderer Objekte) aufrufen.
Methoden entsprechen Funktionen oder Prozeduren in nicht-objektorientierten Programmiersprachen. Da sie aber einer Klasse oder einem Objekt eigen sind, werden sie in objektorientierten Sprachen "Methoden" genannt.

Das Verhalten im Beispiel des Autos umfasst alle Aktionen, für die man das Auto benutzen kann, z.B. das Einsteigen von Personen oder das Starten des Motors.

Definition von Methoden

Methoden werden in Java wie folgt definiert:

Syntax:

[<modifiers>]<rückgabetyp> <name>(<argumentenliste>)
        [throws <exception>] {
..   // Anweisungsblock
}

Wesentlicher Bestandteil dieser allgemeinen Methodendefinition sind der Name der Methode, der Rückgabetyp, die Argumentenliste und der Anweisungsblock. Ein oder mehrere Modifier (Schlüsselworte, die den Definitionen zugefügt werden (Klassen, Methoden, Variablen), um deren Bedeutung zu verändern) können optional gesetzt werden (z.B. ein Zugriffsrecht), das gleiche gilt für den Zusatz throws, auf den in der Lerneinheit Fehlerbehandlung näher eingegangen wird.
Für den Methodennamen gilt die gleiche Konvention wie für Variablennamen. Die Argumentenliste gibt an, welche Parameter beim Aufruf der Methode übergeben werden können. Für jedes Argument müssen der Typ und ein Name deklariert werden. Die Argumente werden durch Kommata voneinander getrennt, z.B. int anzahl, char anfangsBuchstabe.
Der Rückgabetyp gibt an, welcher Datentyp an den Aufrufer dieser Methode aus ihrem Anweisungsblock zurückgeliefert wird. Der Rückgabetyp kann wieder einer der acht primitiven Typen oder ein Referenztyp (Klassenname) sein. Falls die Methode kein Ergebnis an den Aufrufer zurückgeben soll, wird das Schlüsselwort void verwendet.

Im folgenden Beispiel definiert also eine Klasse Auto1 die Methode einsteigen mit dem Argument anzPersonen vom Typ int, die einen Rückgabewert vom Typ boolean liefert.

Beispiel:

//Klasse Auto1
public class Auto1 {
    String name;
    Double höchstgeschwindigkeit;
    int sitzPlätze;
    
    /** Beim Einsteigen werden Plätze besetzt
     *   und das Auto wird langsamer
     */
    boolean einsteigen(int anzPersonen) {
        if (sitzPlätze < anzPersonen) {
            return false;
        }
        sitzPlätze -= anzPersonen;
        höchstgeschwindigkeit  -= 0.1 * anzPersonen;
        return true;
    } // Ende Methode einsteigen
} // Ende Klasse Auto1

Lokale Variablen

Lokale Variablen sind Variablen, die innerhalb einer Methode deklariert werden. Ihre Lebensdauer beschränkt sich auf die Zeit der Ausführung einer Methode. Lokale Variablen müssen explizit initialisiert werden, bevor sie innerhalb der Methode verwendet werden können. Der Compiler überprüft dies und gibt einen Fehler aus, falls eine lokale Variable verwendet wird, die noch nicht initialisiert wurde.

Beispiel:

//Beispiel für lokale Variable
int multipliziere(int faktor) {
    // Deklaration und Initialisierung einer
    // lokalen Variablen
    int original = 5;

    return original * faktor;
}

Überladen von Methoden

Es ist möglich, in einer Klasse mehrere Methoden mit gleichem Namen zu definieren. In diesem Fall spricht man vom Überladen (Overloading) von Methoden. Diese Technik bietet sich immer dann an, wenn es in einer Klasse Methoden gibt, die prinzipiell gleiche Operationen durchführen, aber eine unterschiedliche Argumentenliste besitzen. Überfliegt ein Programmierer eine Dokumentation und findet mehrere Methoden mit gleichen Namen, so wird er davon ausgehen, dass in all diesen Methoden im Wesentlichen das gleiche passiert.
Beim Aufruf einer der überladenen Methoden muss klar sein, welche der gleichlautenden Methoden ausgeführt werden soll. Die Unterscheidung findet durch die Parameterlisten (Anzahl und Typ der Parameter) statt. Man spricht hier auch von der Signatur der Methode, die unterschiedlich sein muss.

Folgende Regeln gelten beim Überladen von Methoden:

  • Die Methoden tragen denselben Namen.
  • Die Parameterliste unterscheidet sich in Typ und/oder Anzahl der Parameter.
  • Der Rückgabetyp kann sich unterscheiden. Es reicht aber nicht aus, wenn sich die Methoden nur durch den Rückgabetyp unterscheiden.

Die Klasse Math ist eine Klasse aus dem Package java.lang. Hier werden eine Reihe von Methoden angeboten, die die üblichen mathematischen Funktionen realisieren. Unter anderem sind in Math Methoden enthalten, die zwischen zwei Zahlen das Maximum herausfinden. Alle diese Methoden tragen den Namen max und unterscheiden sich nur in der Parameterliste und im Rückgabetyp. Es können hier zwei int, long, float oder double angegeben werden.

Beispiel:

//Beispiele für überladene Methoden
public static   int  max(int a, int b)

public static  long  max(long a, long b)

public static float  max(float a, float b)

public static double max(double a, double b)

Auch in der Klasse Auto könnte eine Überladung der Methode einsteigen durchgeführt werden. Die Methode


boolean einsteigen(int anzPersonen,
                    double gewichtAllePersonen,
                    double gewichtGepäck) {
        ...
}

könnte bei der Überprüfung des zulässigen Gesamtgewichts das Gewicht des Gepäcks und der Personen berücksichtigen.

Kommentare (0)

Ihr Kommentar

Name