Kurzeinstieg Java: Methoden

Aus Wikibooks
Zur Navigation springen Zur Suche springen
Duke (Java mascot) waving.svg

Wie sind Methoden aufgebaut?[Bearbeiten]

Methoden bestehen aus einem Methodenkopf und einem Methodenrumpf.

Der Methodenkopf besteht aus:

  • höchstens einem Zugriffsmodifizierer (engl. access level modifier) aus der Menge public, private und protected,
  • weiteren Modifizierern wie beispielsweise static
  • genau einem Rückgabetype wie double, 'String' oder dergleichen. Wenn es keine Rückgaben gibt, dann ist der Rückgabetyp void.
  • Der Name der Methode,
  • die Parameterliste und
  • eine Menge an Ausnahemetypen, die von der Methode geworfen werden können.

Falls die Methode ein Konstruktor ist, dann entfällt der Rückgabetyp vollständig. Das erwartet Sie im nächsten Kapitel.

Die Parameterliste ist entweder leer () oder besteht aus einer Folge von Typen und Parameternamen. Parameter selber werden genau dann als Werteparameter (engl. call by value) übergeben, wenn der zugehörige Typ ein primitiver Datentyp ist. Sonst handelt es sich um einen Referenzparameter (engl. call by reference).

Vorsicht Falle: In Programmiersprachen und speziell Java wird die Signatur einer Methode[1] definiert als die Kombination aus dem Methodennamen und der Menge an Parametertypen. In der Theorie der abstrakten Datentypen gehört oft der Rückgabetyp[2] mit hinzu.

Es sind beispielsweise

public static String addiere(String a, String b) throws NumberFormatException

void f()

gültige Methodenköpfe mit den Signaturen addiere(String, String) und f(void).

Der Methodenrumpf wird in den bekannten Klammern eingefasst. Im Methodenrumpf darf man mindestens folgendes in Bezug auf die umschließende Klasse:

  • die eigenen Parameter lesen und beschreiben (sofern sie beschreibbar sind),
  • alle Methoden der eigenen Klasse ausführen,
  • Eigenschaften, auch Attribute genannt (engl. member variable) der Klasse lesen und beschreiben (sofern sie beschreibbar sind).

Beispiele für vollständige Funktionen kennen Sie aus den früheren Kapiteln.

Die Auswirkung der Werte- und Referenzparameter zeigt das folgende Beispiel. Der Parameter v ist ein Werteparameter, r[] hingegen ein Referenzparameter:

class Parametertest
{
    static void callByValue(int v) { 
        v = 10;
    }

    static void callByReference(int[] r) {
        r[0] = 10;
    }

    public static void main(String[] args) {

        int a = 3;
        System.out.println("a=" + a);
        callByValue(a);
        System.out.println("a=" + a);

        int[] b = {1};
        System.out.println("b[0]=" + b[0]);
        callByReference(b);
        System.out.println("b[0]=" + b[0]);

    }
}


Das Schlüsselwort final wird in Parameterlisten benutzt, um konstante Parameter zu kennzeichnen. Der Inhalt dieser Parameter darf nicht geändert werden. Von den folgenden drei Methoden lässt sich nur eine kompilieren:

static void callByValue(final int v) {
        v++;
}

static void callByReference(final int[] r) {
        r[0] = 10;
}

static void callByReference(final int[] r) {
        r = new int[10];
}


Mit drei Punkten nach dem Typnamen werden variable Argumentenlisten gekennzeichnet. Aus dem Kapitel Kleine_Textbearbeitung kennen Sie eine Funktion, die so etwas tut, format() kann jede Zahl von Parametern verarbeiten. Variabel ist dabei nur die Anzahl der Argumente des selben Typs:

class Variadic
{
    static void addiere(int... args) {
        int summe = 0;
        for(int i : args) {
            summe += i;
        }
        System.out.println("summe= " + summe);
    }

    public static void main(String[] args) {

        addiere(1, 2, 3);
    }
}

Die drei Punkte (...) folgen unmittelbar auf den Typ. Links von einem variablen Parameter dürfen weitere Parameter deklariert werden, rechts davon keiner. Variable Parameter verhalten sich im Zugriff wie ein Array.

Hinweis: Das Unicode-Zeichen "…" kann man dafür leider nicht verwenden.

  1. vergl. http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html
  2. vergl.  Abstrakter Datentyp (bessere Quelle gewünscht)

Was bedeutet static?[Bearbeiten]

Sowohl Methoden wie auch Attribute können mit static deklariert werden. Beide Sorten Klassenmitglieder sind damit sofort nutzbar, es muss nicht erst ein Objekt der Klasse erzeugt werden. Beispielsweise waren alle Konstanten und Methoden der Klasse 'Math' statisch deklariert.

Was ist eine anonyme Funktion?[Bearbeiten]

Schreib mit:

  • Was sind anonyme Funktionen und wozu sind sie gut?