1 / 27 Einstieg in die Informatik mit Java Methoden / Funktionen Gerd Bohlender Institut für Angewandte und Numerische Mathematik
Gliederung 2 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition 4 void-methoden 5 Parameterübergabe, Methodenaufruf 6 Spezialfälle 7 Überladen von Methoden
Gliederung 3 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition 4 void-methoden 5 Parameterübergabe, Methodenaufruf 6 Spezialfälle 7 Überladen von Methoden
Überblick In diesem Kapitel betrachten wir Methoden als spezielle Form von Funktionen. Standardfunktionen Bekannt: Standardfunktionen wie Math.sin, Math.exp Eigene Funktionen Definition beliebiger eigener Funktionen 4 / 27
Gliederung 5 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition 4 void-methoden 5 Parameterübergabe, Methodenaufruf 6 Spezialfälle 7 Überladen von Methoden
6 / 27 Methoden Methoden bilden das Analogon zu den aus anderen Programmiersprachen bekannten Konzepten wie Funktionen, Prozeduren, Unterprogrammen oder Subroutines. Zweck: mehrfach vorkommender Quelltext kann zusammengefasst werden (Einsparung an Quelltext), Methoden können in anderen Programmen leicht wieder verwendet werden, Programme können übersichtlicher gestalten werden, Methoden können separat getestet werden, dadurch: Fehlermöglichkeiten werden reduziert. In diesem Abschnitt werden zunächst nur statische Methoden, d. h. nicht objektorientierte Methoden, behandelt, die aus diesem Grunde mit dem Modifizierer static markiert werden.
Gliederung 7 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition 4 void-methoden 5 Parameterübergabe, Methodenaufruf 6 Spezialfälle 7 Überladen von Methoden
Methodendefinition Syntax Modifizierer Typspezifikation Methodenname (formale Parameterliste) { Variablendefinitionen und Anweisungen Die formale Parameterliste (oder formale Argumentliste ) setzt sich jeweils aus der Typspezifikation gefolgt vom zugehörigen Bezeichner zusammen und wird durch Kommata getrennt: Typ 1 Name 1,..., Typ n Name n Demobeispiel s t a t i c i n t zehnmal ( i n t x ) { return x 10; 8 / 27
9 / 27 Methodendefinition, Regeln Einige Regeln bei der Methodendefinition: Formale Parameter sind spezielle Variablen, die Werte an eine Methode übergeben; in der Methode dürfen sie als normale Variable verwendet werden. Die formale Parameterliste darf leer sein, die runden Klammern hingegen müssen stehen. Für jeden Parameter muss eine eigene Typspezifikation existieren. Demobeispiel s t a t i c i n t ohneparameter ( ) {... s t a t i c i n t mehrereparameter ( i n t x, i n t y ) {...
10 / 27 Methodendefinition, Weitere Regeln Referenztypen sind als Parameter und Ergebnisse zugelassen, also Zeichenketten, Feldtypen und beliebige andere Objekte (dies wird später im Detail behandelt). Demobeispiel: String s t a t i c S t r i n g zweimal ( S t r i n g s t r ) { return s t r + + s t r ;
Methodendefinition: Ergebnistyp Die Rückgabe des Ergebnisses erfolgt über return Ausdruck; Der Ausdruck muss dabei zuweisungskompatibel zum Typ der Methode sein (also gleicher Typ oder automatisch konvertierbar). Varianten von return s t a t i c double r i c h t i g 1 ( double x ) { return 3.14159 x + 5.678; / / okay Varianten von return s t a t i c double r i c h t i g 2 ( i n t x ) { return x +7; / / auch okay, wird k o n v e r t i e r t 11 / 27
12 / 27 Methodendefinition: fehlendes return Mit der return Anweisung wird die Methode abgebrochen und das angegebene Ergebnis zurückgeliefert. Insgesamt muss ein return durchlaufen werden, sonst tritt ein Fehler auf. Achtung Ein fehlendes return ist eine beliebte Fehlerquelle bei der Verwendung von bedingten und verzweigten Anweisungen! s t a t i c i n t f a l s c h ( i n t x ) { i f ( x > 0) return x +1;
Methodendefinition: fehlendes return In jedem Zweig ein return s t a t i c i n t r i c h t i g 1 ( i n t x ) { i f ( x > 0) return x +1; else return 0; / / a l s B e i s p i e l Variante: ein return am Ende s t a t i c i n t r i c h t i g 2 ( i n t x ) { i f ( x > 0) return x +1; / /... return x ; 13 / 27
14 / 27 Komplettes Beispiel Beispiel Methode zur Berechnung von x n mit n ganzzahlig s t a t i c double power ( double x, i n t n ) { i n t m = Math. abs ( n ) ; / / Absolut Betrag von n double y = 1. 0 ; / / Berechnung von x ˆm for ( i n t i =0; i <m; ++ i ) y =x ; / / Ergebnis e v e n t u e l l i n v e r t i e r e n i f ( n>=0) / / O r i g i n a l n return y ; else return 1. 0 / y ; Der Aufruf erfolgt dann z.b. im Hauptprogramm über: double y = power ( a, 5 ) ; Die Methode Math.pow() bestimmt ebenfalls x y, wobei y dann auch eine Gleitkommazahl sein darf.
Gliederung 15 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition 4 void-methoden 5 Parameterübergabe, Methodenaufruf 6 Spezialfälle 7 Überladen von Methoden
Definition einer void-methode 16 / 27 Wird kein Ergebnis benötigt, so ist der Ergebnistyp void und die return Anweisung lautet schlicht: return; Diese Anweisung muss nicht explizit angegeben werden, sondern wird am Ende der Methode automatisch ausgeführt. Demobeispiel s t a t i c void h a l l o ( S t r i n g name) { System. out. p r i n t l n ( Hallo + name +! ) ;
17 / 27 void-methode: Beispiel Hauptprogramm Das Hauptprogramm main ist eine bekannte void-methode. Es hat kein Ergebnis. Aber es gibt meistens Werte über die Standardausgabe aus. Demobeispiel public s t a t i c void main ( S t r i n g [ ] args ) { System. out. p r i n t l n ( p i = + Math. PI ) ;
Gliederung 18 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition 4 void-methoden 5 Parameterübergabe, Methodenaufruf 6 Spezialfälle 7 Überladen von Methoden
Parameterübergabe, Methodenaufruf Syntax Methodenname (aktuelle Parameterliste) Die aktuelle Parameterliste (oder aktuelle Argumentliste ) muss genauso viele Parameter besitzen wie die formale Parameterliste. Aktuelle und formale Parameter werden entsprechend ihrer Reihenfolge einander zugeordnet. Die aktuellen Parameter müssen von zuweisungskompatiblem Typ zum entsprechenden formalen Parameter sein (also gleicher Typ oder automatische Konversion möglich). Beim Aufruf der Methode wird das aktuelle Argument ausgewertet und das Ergebnis in einer lokalen Variablen mit dem Namen des formalen Parameters abgelegt, d. h. es wird stets mit einer Kopie der übergebenen Daten gearbeitet. 19 / 27
Parameterübergabe, Methodenaufruf 20 / 27 Diese Art der Parameterübergabe heißt Werteparameter. In Java werden alle Parameter einer Methode als Werteparameter übergeben. Weiterhin muss der Methodenaufruf in einem Ausdruck eines zuweisungskompatiblen Typs erfolgen (gleicher Typ oder automatische Konversion möglich). Beispiel zum Methodenaufruf s t a t i c i n t summe ( i n t m, i n t n ) { return m+n ; / / A u f r u f z. B. i n main i n t a=1, b=2, c ; c = summe ( a, b ) ; / / okay, a l l e s i n t c = summe ( X, 3); / / okay, Konversion c = 3 summe( a, 2 2 ) + b ; / / okay, i n t Ausdruck
Leere Parameterlisten 21 / 27 Ist die formale (und damit auch die aktuelle) Parameterliste leer, so müssen die runden Klammern trotzdem stehen. Leere Parameterlisten s t a t i c i n t l e e r ( ) { return 777; / / A u f r u f z. B. i n main System. out. p r i n t l n ( l e e r ( ) ) ;
Änderungen der formalen Parameter 22 / 27 Der aktuelle Parameter lässt sich bei einer Übergabe als Werteparameter nicht verändern. (Bei Referenztypen ist dies mit Einschränkungen möglich). Wertzuweisungen an den entsprechenden formalen Parameter sind erlaubt und wirken sich nur innerhalb der Methode aus. Änderung des formalen Parameters s t a t i c i n t aendern ( i n t x ) { ++x ; / / x erhoehen return x ; / / dies i s t das Ergebnis / / A u f r u f z. B. i n main i n t a=1, b ; b = aendern ( a ) ; / / 2 System. out. p r i n t l n ( a ) ; / / 1
Gliederung 23 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition 4 void-methoden 5 Parameterübergabe, Methodenaufruf 6 Spezialfälle 7 Überladen von Methoden
Aktuelle Argumente mit Ausdrücken 24 / 27 Die aktuellen Parameter werden von links nach rechts ausgewertet. Beispiel s t a t i c i n t f ( i n t i, i n t j ) { / / D e f i n i t i o n von f return ( i + j ) ;... / / im Hauptprogramm : i n t i = 1; System. out. p r i n t l n ( f ( i ++, i ) ) ; / / A u f r u f : f ( 1, 2 ) e r g i b t 3
25 / 27 Bemerkungen zu Methoden Eine Schachtelung von Methoden ist im Gegensatz zu manchen anderen Programmiersprachen in der Regel nicht erlaubt. Methoden müssen stets auf äußerster Ebene in einer Klasse definiert werden. Die Reihenfolge der Definition von Methoden spielt in Java keine Rolle. Man darf auch Methoden aufrufen, die erst weiter unten in der Klasse definiert sind. Es wird auch keine separate Deklaration von Methoden benötigt, wie dies in manchen anderen Programmiersprachen üblich ist. Lokale Variablen dürfen nicht den gleichen Namen wie ein formaler Parameter besitzen. Aktuelle und zugeordnete formale Parameter können die gleichen oder verschiedene Bezeichner erhalten. Es sind in jedem Fall verschiedene Variablen.
Gliederung 26 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition 4 void-methoden 5 Parameterübergabe, Methodenaufruf 6 Spezialfälle 7 Überladen von Methoden
Überladen von Methoden 27 / 27 In Java können mehrere Methoden mit gleichem Namen in einer Klasse existieren. Beispiel double max ( double x, double y ) {... i n t max ( i n t x, i n t y ) {... Die Methoden müssen unterschiedliche Parameterlisten besitzen. Entscheidend sind hierbei die Typen, nicht die Namen der formalen Parameter. Der Ergebnistyp ist frei wählbar. Allerdings ist es nicht erlaubt, dass sich die Methoden nur in ihrem Ergebnistyp unterscheiden. Signatur: Name und Parameterliste sind entscheidend. Es existiert eine Variante mit beliebig vielen Parametern eines Typs.