- 1 Section
- 10 Lessons
- unbegrenzt
- Java Grundlagen10
- 1.1Java-Grundlagen: JDK, JVM, erstes Programm
- 1.2Variablen, Datentypen und Operatoren
- 1.3Kontrollstrukturen: if, else, switch
- 1.4Schleifen: for, while, do-while
- 1.5Arrays und Strings
- 1.6Methoden: Definition, Parameter, Rückgabe
- 1.7Fehlerbehandlung: try-catch-finally, Exceptions
- 1.8Einstieg in Klassen und Objekte
- 1.9Eingabe und Ausgabe: Scanner, System.out
- 1.10Praxisprojekt: Kleines Java-Programm von A bis Z
Methoden: Definition, Parameter, Rückgabe
Bisher schrieben wir allen Code direkt in die main-Methode. Bei kleinen Programmen geht das – aber sobald dein Programm 100+ Zeilen hat, wird es unübersichtlich. Methoden sind die Lösung: wiederverwendbare Code-Blöcke mit einem Namen, einer Aufgabe und einem klaren Eingang/Ausgang. Sie sind das wichtigste Werkzeug um Programme zu strukturieren.
Die Analogie: Eine Methode ist wie eine Maschine in einer Fabrik. Du wirfst Input rein (Parameter), die Maschine macht ihre Arbeit (der Code), und unten kommt ein Output raus (Rückgabewert). Die Maschine ist immer dieselbe – du kannst sie 1000-mal benutzen mit unterschiedlichem Input. Math.sqrt(16) ist eine Maschine die du jeden Tag ohne nachzudenken benutzt: Input 16, Output 4.
1) Die Anatomie einer Methode
Eine Methoden-Definition hat eine feste Struktur: Modifikatoren – Rückgabetyp – Name – Parameterliste – Körper. Klicke jeden Teil:
return a + b;
}
int summe = addiere(3, 5); – das Ergebnis (8) wird zurückgegeben und der Variable summe zugewiesen. Wichtig: Der Aufruf verwendet nur den Namen + die Parameterwerte, keine Typen. Die Typen stehen nur in der Definition.2) Der Call-Stack: Was passiert beim Methodenaufruf?
Wenn deine main-Methode addiere(3, 5) aufruft, springt die JVM in die addiere-Methode, führt sie aus, und kommt mit dem Ergebnis zurück. Im Speicher wird dafür ein Stack (Stapel) angelegt: jeder Methodenaufruf legt einen neuen Stack-Frame oben drauf. Wenn die Methode fertig ist, wird ihr Frame abgeräumt und es geht weiter wo die aufrufende Methode war. Probier es mit dem Schritt-für-Schritt-Tracer:
3) Parameter-Übergabe: Pass-by-Value
Java übergibt Parameter by value – das heißt: in die Methode geht eine Kopie des Werts. Änderungen an Parameter-Variablen in der Methode wirken sich NICHT auf die ursprüngliche Variable außerhalb aus. Beispiel:
zahl = zahl * 2; // nur die KOPIE wird geändert!
}
public static void main(...) {
int x = 10;
verdopple(x);
System.out.println(x); // 10! NICHT 20!
}
Bei Arrays (und allen anderen Referenztypen) ist es etwas anders: zwar wird auch eine Kopie übergeben – aber es ist die Kopie einer Referenz. Beide Referenzen zeigen auf dieselben Daten im Speicher. Wenn die Methode Elemente im Array ändert, sieht der Aufrufer diese Änderung – aber wenn die Methode dem Parameter ein neues Array zuweist, ist die ursprüngliche Variable außerhalb unverändert. Das ist ein häufiger Stolperstein.
4) Methoden überladen (Overloading)
In Java darfst du mehrere Methoden mit demselben Namen haben – solange sie sich in der Parameterliste unterscheiden. Das heißt Method Overloading. Beispiel: println() existiert in vielen Varianten:
return a > b ? a : b;
}
public static double max(double a, double b) {
return a > b ? a : b;
}
public static int max(int a, int b, int c) {
return max(max(a, b), c);
}
Java wählt beim Aufruf automatisch die richtige Variante anhand der übergebenen Argumente. max(3, 5) ruft die int-Version auf, max(3.0, 5.0) die double-Version, max(1, 2, 3) die Drei-Argument-Version.
5) Scope: Wo gilt welche Variable?
Variablen haben einen Gültigkeitsbereich (Scope) – also einen Bereich des Codes in dem sie existieren. Vereinfacht: eine Variable lebt von ihrer Deklaration bis zur schließenden geschweiften Klammer des Blocks in dem sie deklariert wurde. Außerhalb davon existiert sie nicht.
Zusammenfassung
Methode = wiederverwendbarer Code-Block mit Name. Signatur: modifikatoren rückgabetyp name(parameter). Aufruf: name(argumente). return wert; beendet Methode und gibt Wert zurück. void = keine Rückgabe. Java ist Pass-by-Value: Kopien der Argumente werden übergeben. Bei Arrays sieht man jedoch die Element-Änderungen weil Referenzen geteilt sind. Method Overloading: gleicher Name, unterschiedliche Parameterliste. Scope: Variablen leben nur in ihrem Block. Call-Stack: jeder Methodenaufruf legt einen Frame auf den Stack.
