Innerhalb eines Klassenkörpers können neben Feldern auch Methoden als
Mitglieder der Klasse deklariert werden. Eine Methode beinhaltet ausführbaren
Programmcode (Instruktionen der virtuellen Java-Maschine). Ein vereinfachter
Aufbau einer Methodendeklaration kann wie folgt angegeben werden (die Bestandteile
einer Methodendeklaration zu Generics und der
MethodenModifiers_opt ReturnTyp MethodenName(FormaleParameterListe_opt) { Anweisung1; Anweisung2; ... } Eine Methodendeklaration besteht aus einem Methodenkopf und einem Methodenkörper.
Der Methodenkopf kann mit Methodenmodifiers beginnen und der Methodenkörper fängt
mit der öffnenden geschweiften Klammer "{" an und endet mit "}". Methodenmodifiers
wie z.B. Ebenso wie bei Feldern werden Methoden dadurch
unterschieden, ob bei der Methodendeklaration der Modifier Listing 1.8. /* MethodExample.java */ public class MethodExample { public static void method1() { System.out.println("Hello"); } public void method2() { System.out.println("World!"); } }
Es besteht ein Unterschied beim Aufruf von Klassenmethoden und Instanzmethoden. Ein Klassenmethode wird immer ohne eine Referenz auf ein bestimmtes Objekt aufgerufen. Der Aufruf einer Klassenmethode erfolgt ähnlich wie bei Klassenvariablen mit Hilfe der Punktnotation. Vor dem Zeichen "." wird der Name der Klasse notiert, welche die aufzurufende statische Methode deklariert. Nach dem Punkt folgt der Name der Klassenmethode. Aufruf von Methoden (Punktnotation): Bei Klassenmethoden: KlassenName.KlassenmethodenName Bei Instanzmethoden: InstanzName.InstanzmethodenName Der Aufruf einer Instanzmethode erfolgt ebenfalls mit Hilfe der
Punktnotation. Im Gegensatz zum Aufruf von Klassenmethoden werden nicht-statische
Methoden immer in Bezug auf eine bestimmte Instanz (Objekt) aufgerufen. Der Name
des von einer Klasse erzeugten Objekts wird in diesem Fall vor dem Punkt angeordnet.
Der Java-Quelltext Listing 1.9. /* MethodExample2.java */ public class MethodExample2 { public static void method1() { System.out.println("Hello"); } public void method2() { System.out.println("World!"); } public static void main(String[] args) { MethodExample2.method1(); method1(); MethodExample2 me2 = new MethodExample2(); me2.method2(); } } Das kurze Programm gibt zweimal die Zeichenkette "Hello" und einmal
"World!" auf dem Bildschirm aus. Innerhalb der
Innerhalb einer Methodendeklaration kann der Typ des Rückgabewertes der
Methode angegeben werden (return type). Für die Angabe dieses Typs sind sowohl
primitive Typen als auch Referenztypen (z.B. Klassentyp, Arraytyp) erlaubt.
Mit Hilfe des Schlüsselwortes return Ausdruck_opt Hinter dem Schlüsselwort Listing 1.10. /* MethodExample3.java */ public class MethodExample3 { public int method3() { int a; a = 3 + 4; return a; } public static void main(String[] args) { MethodExample3 me3 = new MethodExample3(); int b = me3.method3(); System.out.println(b); } } Die lokale Variable public int method3() { return 3 + 4; } Bei der Deklaration einer Methode können direkt hinter dem Methodennamen, innerhalb von runden Klammern, (formale) Parameter angegeben werden. Soll der Methode kein Argument übergeben werden, folgt dem Namen der Methode ein leeres Klammerpaar. Mehrere Parameter innerhalb des Klammerpaares werden durch Kommata voneinander getrennt. Ein Parameter kann durch die Angabe seines Typs mit anschließender Nennung seines Namens angegeben werden. ParameterTyp ParameterName Der Name eines Parameters bezeichnet einen Argumentwert, der der Methode
durch einen Aufruf übergeben wurde. Für jeden Parameter wird jedesmal beim
Aufruf der zugehörigen Methode eine neue Parametervariable
erzeugt. Die Variable wird anschließend mit dem Wert des übergebenen
Arguments initialisiert. Der anschließende Programmausschnitt deklariert die
statische Methode public static void method0(int a) { } public static void main(String[] args) { method0(3); } Die Parametervariable Listing 1.11. /* MethodExample4.java */ public class MethodExample4 { static int a = 3; int b = 3; public void method4(int a, MethodExample4 obj) { a = a + 1; obj.b = obj.b + 1; System.out.println(a); System.out.println(obj.b); } public static void main(String[] args) { MethodExample4 me4 = new MethodExample4(); me4.method4(a, me4); System.out.println(a); System.out.println(me4.b); } } Durch das Listing werden nacheinander die Zahlenwerte 4, 4, 3 und 4
ausgegeben. Das Zustandekommen der letzten 4 der Konsolenausgabe resultiert
aus der Übergabe eines Arguments, das eine Referenz auf ein Objekt ist.
Diese Referenz wird innerhalb der aufgerufenen Methode genutzt, um die
Instanzvariable
Variable Parameterlisten (varargs) Mit Erscheinen des JDK 5 wurde die Möglichkeit geschaffen Methoden mit einer variablen Anzahl von Argumenten aufzurufen (varargs). Der letzte formale Parameter einer Parameterliste kann ein "variable arity parameter" sein (arity: dt. Arität, Stelligkeit). Ein solcher Parameter kann ausschließlich nur als letzter Parameter der Liste notiert werden und unterliegt dem folgenden vereinfachten Aufbau: ParameterTyp... ParameterName Nach Angabe des Typs des Parameters folgen direkt im Anschluss drei
Punkte. Nach einem Leerzeichen kann danach der Name des Parameters angegeben
werden. Die drei Auslassungspunkte kennzeichnen diesen besonderen Parameter als
Parameter mit variabler Stelligkeit. Eine Parameterliste, die einen Parameter
mit variabler Stelligkeit enthält, wird als
variable Parameterliste bezeichnet.
Im folgenden Beispiel wird die Methode Listing 1.12. /* MethodExample5.java */ public class MethodExample5 { public static void printHello(String... str) { for (int i = 0; i < str.length; i++) { System.out.println("Hello " + str[i] + "!"); } } public static void main(String[] args) { printHello("World", "Java", "Hans"); } } Das Listing gibt die drei Zeichenketten " Listing 1.13. /* MethodExample6.java */ public class MethodExample6 { public static void printVarargs1(int... varparas) { for (int i : varparas) { System.out.println(i); } } public static void printVarargs2(int i, int[]... varparas) { System.out.println(i); for (int[] j : varparas) { for (int k : j) { System.out.print(k + " "); } System.out.println(); } } public static void main(String[] args) { printVarargs1(3, 4, 5); printVarargs2(6, new int[]{7, 8}, new int[]{9, 10}); } } Der Java-Quelltext verwendet die erweiterte 3 4 5 6 7 8 9 10 Innerhalb einer Klasse können mehrere Methoden mit dem gleichen Namen deklariert werden. Eine Unterscheidung kann durch die Signaturen der Methoden erfolgen. Wenn mehrere Methoden innerhalb einer Klasse den selben Namen aber unterschiedliche Signaturen besitzen, wird der Methodenname auch als überladen bezeichnet. Die Signatur einer Methode besteht aus dem Namen der Methode und der Anzahl und Typ der (formalen) Parameter. Die anschließende Übersicht zeigt Methodendeklarationen mit zugehörigen Signaturangaben: Methode: public void add(int a, int b) { ... } Signatur: add(int,int) Methode: public int add(int a, int b) { ... } Signatur: add(int,int) Methode: public void add(int a, int b, int c) { ... } Signatur: add(int,int,int) Methode: public void add(int a2, int b2, float c2) { ... } Signatur: add(int,int,float) Methoden mit gleicher Signatur können nicht unterschieden werden und sind
daher auch nicht innerhalb einer Klasse zulässig. Die ersten beiden
Methodendeklarationen mit jeweils zwei Parametern vom Typ Listing 1.14. /* MethodExample7.java */ public class MethodExample7 { public void add(int a, int b) { int d = a + b; System.out.println(d); } public void add(int a, int b, int c) { int d = a + b + c; System.out.println(d); } public static void main(String[] args) { MethodExample7 me7 = new MethodExample7(); me7.add(3, 4); me7.add(4, 5, 6); } } |
|