Methoden
Kurz gesagt: Eine Methode ist ein Codeblock mit einem Namen, der eine Aufgabe erledigt: Du schreibst sie einmal und rufst sie über ihren Namen so oft auf, wie du sie brauchst.
Problem
Eine Änderung, drei Stellen
Du schreibst das Kassenprogramm für einen kleinen Laden. Jeder Kassenbon beginnt mit dem Namen des Ladens und der Telefonnummer, also hast du diese beiden Zeilen überall hinkopiert, wo ein Bon gedruckt wird.
Der Laden ändert seine Telefonnummer. Du korrigierst sie an zwei Stellen und übersiehst die dritte:
System.out.println("Eckladen");System.out.println("Tel. 030 123 4567");System.out.println("Brot 1,20 €");
System.out.println("Eckladen");System.out.println("Tel. 030 123 4567");System.out.println("Milch 2,10 €");
System.out.println("Eckladen");System.out.println("Tel. 030 765 4321");System.out.println("Kaffee 3,50 €");EckladenTel. 030 123 4567Brot 1,20 €EckladenTel. 030 123 4567Milch 2,10 €EckladenTel. 030 765 4321Kaffee 3,50 €Der dritte Kunde bekommt einen Bon mit der alten Nummer. Je mehr Kopien es gibt, desto leichter übersieht man eine.
Die Idee
Einmal schreiben, mit Namen aufrufen
Leg den Teil, der sich wiederholt, an eine Stelle und gib ihm einen Namen. Das ist eine Methode: ein Codeblock mit einem Namen, der eine Aufgabe erledigt.
Du schreibst die Methode einmal. Wo du sie dann brauchst, schreibst du nur ihren Namen mit Klammern: printHeader();. Das nennt man die Methode aufrufen.
Ändert der Laden seine Telefonnummer wieder, korrigierst du eine Zeile in der Methode, und jeder Bon stimmt.
Sieh es dir an
Was bei einem Aufruf passiert
Das Programm läuft Zeile für Zeile. Erreicht es einen Aufruf, springt es in die Methode, führt ihren Rumpf aus und kehrt direkt hinter den Aufruf zurück. Folge der Kugel: Sie ist die Stelle, an der das Programm gerade ist.
static void printHeader() { System.out.println("Eckladen"); System.out.println("Tel. 030 123 4567");}
printHeader();System.out.println("Brot 1,20 €");printHeader();System.out.println("Milch 2,10 €");Schritt für Schritt, in Worten
- Das Programm beginnt in main und erreicht printHeader().
- Ein Aufruf: Die Ausführung springt in die Methode.
- Die Methode gibt den Kopf des Kassenbons aus.
- Die Methode ist fertig: Die Ausführung kehrt direkt hinter den Aufruf zurück.
- main macht weiter: Es gibt das Brot aus.
- Ein zweiter Aufruf: derselbe Code, ohne ihn noch einmal zu schreiben.
- Der Kopf wird noch einmal ausgegeben.
- Zurück in main, weiter zur nächsten Zeile.
Beim zweiten Mal schreibst du den Kopf nicht noch einmal. Du rufst dieselbe Methode auf, und sie gibt dieselben zwei Zeilen aus.
Die Idee
Wie man eine Methode schreibt
Hier ist das ganze Programm, damit du siehst, wo die Methode steht:
public class Main { static void printHeader() { System.out.println("Eckladen"); System.out.println("Tel. 030 123 4567"); }
public static void main(String[] args) { printHeader(); System.out.println("Brot 1,20 €"); }}EckladenTel. 030 123 4567Brot 1,20 €- Der Name sagt, was die Methode tut, deshalb ist er ein Verb:
printHeader,printFooter. voidbedeutet, dass die Methode nur etwas tut (hier gibt sie etwas aus) und kein Ergebnis zurückgibt. Methoden, die ein Ergebnis zurückgeben, kommen in der nächsten Lektion.- Die leeren Klammern bedeuten, dass die Methode nichts von außen nimmt. Auch sie füllen wir in der nächsten Lektion.
- Der Rumpf steht zwischen
{und}. - Die Methode steht in der Klasse, neben main, nicht in main.
Vorerst schreiben wir static vor jede Methode. Was es bedeutet, kommt im Modul Klassen und Objekte, zusammen mit der Hülle public class Main.
In Java beginnen Methodennamen mit einem Kleinbuchstaben, und jedes weitere Wort beginnt mit einem Großbuchstaben: printHeader, printFooter.
Probier es aus
In welcher Reihenfolge?
Was gibt das Programm aus?
static void printThanks() { System.out.println("Vielen Dank!");}
System.out.println("Bestellung Nr. 1024");printThanks();System.out.println("Bestellung Nr. 1025");printThanks();Eine Methode läuft, wenn sie aufgerufen wird, nicht dort, wo sie geschrieben steht. Hier wird sie zweimal aufgerufen, also wird „Vielen Dank!“ zweimal ausgegeben, jedes Mal nach seiner Bestellung.
Probier es aus
Was fehlt?
Diese Methode gibt den unteren Teil des Bons aus. Was gehört in die Lücke?
static printFooter() {
System.out.println("Bis zum nächsten Mal!");
}void: Die Methode gibt nur etwas aus und liefert kein Ergebnis zurück.Probier es aus
Finde den Fehler
Wähle die Zeile mit dem Fehler.
printThanks();. Ohne sie sieht der Compiler nur den Namen der Methode, keinen Befehl, sie auszuführen.Übung
Der Kassenbon und das Dreieck
Löse sie in deinem Editor. Zu jeder gibt es eine Beispielausgabe, mit der du deine vergleichen kannst.
1. Kassenbon. Schreib drei Methoden:
printLine()gibt mit einer Schleife eine Linie aus 20 Bindestrichen aus;printHeader()gibt den Namen des Ladens, die Telefonnummer und die Linie aus;printFooter()gibt die Linie und „Vielen Dank!“ aus.
Gib in main zwei Bons aus: den Kopf, eine Zeile mit einem Einkauf, den unteren Teil.
EckladenTel. 030 123 4567--------------------Brot 1,20 €--------------------Vielen Dank!EckladenTel. 030 123 4567--------------------Milch 2,10 €--------------------Vielen Dank!2. Dreieck. Schreib eine Methode printTriangle(), die mit verschachtelten Schleifen ein Dreieck aus Sternen ausgibt, 4 Zeilen hoch:
* *** ************In der nächsten Lektion wird die Höhe zu einem Parameter: eine Methode für ein Dreieck in jeder Höhe, die du willst.
Test
Teste dich
Verwandte Lektionen
Abschnitt „Verwandte Lektionen“- Baut auf: Dein erstes Programm · Variablen und Typen · Schleifen
- Geht weiter in: Parameter und return · Überladen · Rekursion · Klassen und Objekte
- Aufgaben zum Thema: Methoden