1 / 17 Einstieg in die Informatik mit Java Methoden und Felder Gerd Bohlender Institut für Angewandte und Numerische Mathematik
Gliederung 2 / 17 1 Überblick 2 Felder als Parameter bei Methoden 3 Feld als Ergebnistyp einer Methode 4 Hauptprogrammparameter
Gliederung 3 / 17 1 Überblick 2 Felder als Parameter bei Methoden 3 Feld als Ergebnistyp einer Methode 4 Hauptprogrammparameter
4 / 17 Überblick In diesem Kapitel wird die Verwendung von Feldern bei Methoden beschrieben. Allgemein: Referenzen Felder, Klassen, Strings Felder als Parameter und Ergebnis Unterscheidung zwischen Referenz und referenziertem Wert Hauptprogramm-Parameter Feld von Strings
Gliederung 5 / 17 1 Überblick 2 Felder als Parameter bei Methoden 3 Feld als Ergebnistyp einer Methode 4 Hauptprogrammparameter
Felder als Parameter bei Methoden 6 / 17 Felder sind als Parameter bei Methoden erlaubt. Syntax: Basistyp [] Die Dimension darf nicht angegeben werden, sie kann über.length bestimmt werden. Beispiel s t a t i c i n t summe ( i n t [ ] x ) { i n t s = 0; for ( i n t i =0; i <x. l e n gth ; i ++) summe += x [ i ] ; return s ; } / / A u f r u f z. B. i n main : i n t [ ] werte = {22,33}; System. out. p r i n t l n (summe( werte ) ) ; / / 55
7 / 17 Felder als Parameter bei Methoden Felder sind Referenztypen wie alle Objekte (Klassen, Strings) Bei Referenztypen enthält eine Variable nicht den eigentlichen Inhalt (z.b. Zahlen in den Feldelementen), sondern nur eine Referenz darauf (Pointer, Zeiger, Verweis, Adresse). Referenzvariablen werden per Wertaufruf übergeben genau wie alle anderen Variablen. D. h. die Referenz wird in eine lokale Variable kopiert. Folglich wird die aktuelle Größe im aufrufenden Programm durch Wertzuweisungen an den formalen Parameter in der Methode nicht verändert. Ein Vorteil hierbei ist, dass eine solche Parameterübergabe extrem schnell ausgeführt werden kann. Sie braucht für ein beliebig großes Feld (oder Objekt) praktisch keine Rechenzeit. Achtung Die Werte, auf die die Referenz verweisen, werden nicht kopiert und können deshalb verändert werden!
Felder als Parameter bei Methoden: Beispiel 8 / 17 Beispiel s t a t i c void demo1 ( i n t [ ] x ) { / / x und y zeigen beide a u f / / g l e i c h e Speicheradressen! / / vorher : x [ 0 ] = y [ 0 ] = 1 x [ 0 ] + + ; / / nachher : x [ 0 ] = y [ 0 ] = 2 } / / Aufruf, z. B. im Hauptprogramm : i n t [ ] y = {1, 2}; / / vorher : y [ 0 ] = 1, x i s t unbekannt demo1 ( y ) ; / / A u f r u f der Methode demo1 / / nachher : y [ 0 ] = 2, x i s t unbekannt
9 / 17 Referenztypen als Parameter bei Methoden Achtung Dies entspricht aus den folgenden Gründen nur teilweise dem Referenzaufruf aus anderen Programmiersprachen (Pascal var, C++ &). Es besteht keine Wahlmöglichkeit. Grundtypen sind immer Werte, Objekte immer Referenzen. Auch bei Referenztypen kann die Referenzvariable selber nicht verändert werden. Die Komponenten des referenzierten Objekts können aber verändert werden.
Felder als Parameter bei Methoden: Beispiel 10 / 17 Beispiel s t a t i c void demo2 ( i n t [ ] x ) { / / vorher : x [ 0 ] = y [ 0 ] = 1 x = new i n t [ ] {4, 5, 6}; / / neues Objekt / / nachher : x [ 0 ] = 4, y [ 0 ] = 1 System. out. p r i n t l n ( x [ 0 ] ) ; / / 4 } / / Aufruf, z. B. im Hauptprogramm : i n t [ ] y = {1,2}; / / vorher : y [ 0 ] = 1, x unbekannt demo2 ( y ) ; / / A u f r u f der Methode demo2 / / nachher : y [ 0 ] = 1 unveraendert, x unbekannt System. out. p r i n t l n ( y [ 0 ] ) ; / / 1
Gliederung 11 / 17 1 Überblick 2 Felder als Parameter bei Methoden 3 Feld als Ergebnistyp einer Methode 4 Hauptprogrammparameter
12 / 17 Feld als Ergebnistyp einer Methode Der Ergebnistyp einer Methode darf ein beliebiger Typ sein, z.b. ein Feld oder ein anderer Referenztyp (String, Klasse). Die return-anweisung gibt eine Referenz auf das Ergebnis zurück. Das referenzierte Objekt (Feld, String, Klasse) wird nicht kopiert. Die Referenzvariable ist nur bis zum Ende der Methode zugänglich. Dies schadet nicht, da das referenzierte Objekt weiter existiert. Diese Form der Ergebnisrückgabe kann extrem schnell ausgeführt werden. Sie braucht für ein beliebig großes Feld (oder Objekt) praktisch keine Rechenzeit.
Feld als Ergebnistyp einer Methode, Beispiel 13 / 17 Beispiel-Programm s t a t i c i n t [ ] quadrate ( i n t dim ) { / / Feld der Laenge dim erzeugen i n t [ ] f = new i n t [ dim ] ; for ( i n t i =0; i <dim ; i ++) f [ i ] = i i ; / / Quadratzahlen / / Ergebnis a b l i e f e r n return f ; / / h i e r endet die Lebensdauer der Referenz f, / / aber das Feld s e l b s t e x i s t i e r t w e i t e r } public s t a t i c void main ( S t r i n g [ ] args ) { i n t [ ] f e l d ; / / nur Referenz / / Feld per Methode erzeugen f e l d = quadrate ( 5 ) ; / / a l l e Feldelemente ausgeben for ( i n t i =0; i <f e l d. l e n g t h ; i ++) System. out. p r i n t l n ( f e l d [ i ] ) ; / / Ausgabe : 0 1 4 9 16 }
Gliederung 14 / 17 1 Überblick 2 Felder als Parameter bei Methoden 3 Feld als Ergebnistyp einer Methode 4 Hauptprogrammparameter
Hauptprogrammparameter 15 / 17 Das Hauptprogramm bei Java-Programmen ist eine Methode der Form Beispiel-Programm class MeinPrg { public s t a t i c void main ( S t r i n g [ ] args ) { / / Z u g r i f f auf args [ 0 ],... } } Argumente werden an der Kommandozeile beim Programmstart angegeben und mit Leerzeichen oder Tabulator getrennt. Anmerkung: Nicht alle Java-Anwendungen besitzen ein Hauptprogramm, z.b. Applets. Aufruf des Beispiel-Programms java MeinPrg Hallo Welt // args[0] = Hallo // args[1] = Welt
16 / 17 Umleitung Eingabe und Ausgabe Die Umleitung der Standardausgabe vom Bildschirm in eine Datei erfolgt durch Achtung > Dateiname Die angegebene Datei wird falls sie schon existiert ohne Warnung unwiderbringlich gelöscht und überschrieben! Entsprechend erfolgt die Umleitung der Eingabe von der Tastatur zu einer Datei über < Dateiname Diese Angaben zählen nicht zur Argumentliste!
Programmname, spezielle Parameter Der Programmname kommt ebenfalls nicht in der Argumentliste vor (im Gegensatz etwa zu C++). Argumente, die Leerzeichen oder Sonderzeichen enthalten, können (je nach Betriebssystem) in Hochkommata eingeschlossen werden. Die Anzahl der Argumente kann (wie bei jedem Feld) über die Komponente.length bestimmt werden. Beispiel java MeinPrg < Daten.dat > Ausgabe.txt Hallo Welt // args[0] = Hallo // args[1] = Welt // args.length = 2 java MeinPrg "Hallo Welt" // args[0] = Hallo Welt // args.length = 1 17 / 17