Einstieg in die Informatik mit Java Klassenvariablen, Klassenmethoden

Gerd Bohlender Institut fur ¨ Angewandte und Numerische Mathematik

1 / 18

Gliederung

1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion

2 / 18

Gliederung

1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion

3 / 18

Klassenmethoden • Bekannt: Instanzmethoden. Objektorientierte Bearbeitung

der Instanzvariablen. • Alternative: Klassenmethoden. Dienen zur Bearbeitung der

¨ Klassenvariablen, ahnlich wie Funktionen, Prozeduren, Subroutines in anderen Programmiersprachen. • Sind mit dem Modifizierer static versehen. Sonst fast wie

Instanzmethoden.

Syntax Modifizierer Typspezifikation Methodenname (formale Parameterliste) { Deklarationen und Anweisungen }

4 / 18

Methodendefinition – 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; double y = 1 . 0 ; i f ( n>=0) m = n ; / / Absolut−Betrag von n else m = −n ; f o r ( i n t i =0; i =0) r e t u r n y ; else r e t u r n 1 . 0 / y ; }

Der Aufruf erfolgt dann im Hauptprogramm uber: ¨ double y = power ( a , 5 ) ; Die Methode Math.pow() bestimmt ebenfalls x y , wobei y dann auch eine Gleitkommazahl sein darf. 5 / 18

Gliederung

1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion

6 / 18

Besonderheiten von Klassenmethoden

• Es gibt keine Referenz this auf die aktuelle Instanz. • Formale Parameter, lokale Variablen, Klassenvariablen

durfen wie bei Instanzmethoden verwendet werden. ¨ Aufrufe von Klassenmethoden sind erlaubt. • Instanzvariablen und Instanzmethoden durfen nur ¨

verwendet werden, wenn eine Instanz genannt wird, z.B. Instanzname.Instanzvariable Instanzname.Instanzmethode ()

7 / 18

Gliederung

1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion

8 / 18

Aufruf einer Klassenmethode • Im Wesentlichen wie bei Instanzmethoden. • Aber: es wird keine Instanz angegeben. • Innerhalb der gleichen Klasse:

Klassenmethode (Aktuelle Parameterliste) class Demo { s t a t i c i n t hoch3 ( i n t x ) { r e t u r n x ∗x ∗x ; } public s t a t i c void main ( S t r i n g [ ] args ) { System . o u t . p r i n t l n ( hoch3 ( 5 ) ) ; / / 125 System . o u t . p r i n t l n ( hoch3 ( 2 + 3 ) − 25 ) ; / / 100 } } 9 / 18

Aufruf aus einer anderen Klasse • Aufruf einer Klassenmethode aus einer anderen Klasse

(sofern der Zugriff aufgrund der Rechte erlaubt ist): Klasssenname.Klassenmethode (Aktuelle Parameterliste) class Demo1 { s t a t i c i n t hoch3 ( i n t x ) { r e t u r n x ∗x ∗ x ; } } class Demo2 { public s t a t i c void main ( S t r i n g [ ] args ) { System . o u t . p r i n t l n (Demo1 . hoch3 ( 5 ) ) ; } }

10 / 18

Instanzname statt Klassenname • Auch erlaubt ist:

Instanzname.Klassenmethode (Aktuelle Parameterliste) Hierdurch erfolgt keine Bindung an die genannte Instanz! public class Demo { static int x ; / / Klassenvariable s t a t i c void erhoehe ( ) { / / Klassenmethode x ++; / / erhoeht x } public s t a t i c void main ( S t r i n g [ ] args ) { Demo a = new Demo ( ) ; Demo b = new Demo ( ) ; / / zwei I n s t a n z e n a . x = 1; / / es g i b t nur e i n x b . erhoehe ( ) ; / / e r h o e h t auch a . x } }

11 / 18

Gliederung

1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion

12 / 18

Hauptprogrammparameter Das Hauptprogramm bei Java (Applets sind hiervon ausgenommen) ist eine Methode der Form public s t a t i c void main ( S t r i n g [ ] args ) { / / args i s t e i n Feld von Z e i c h e n k e t t e n . • Argumente werden an der Kommandozeile mit

Leerzeichen getrennt. • Die Umleitung der Standardausgabe vom Bildschirm in

eine Datei erfolgt durch > Dateiname entsprechend erfolgt die Eingabe uber ¨ < Dateiname

Achtung ¨ Diese Angaben zahlen nicht zur Argumentliste! 13 / 18

Hauptprogrammparameter

• Im Gegensatz zu C++ kommt der Programmname

ebenfalls nicht in der Argumentliste vor.

Beispiel java MeinPrg Hallo Welt

// args[0]=Hallo // args[1]=Welt java MeinPrg < Daten.dat > Ausgabe.txt Hallo Welt // args[0]=Hallo // args[1]=Welt

14 / 18

Gliederung

1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion

15 / 18

Rekursion Es werden bei Methoden zwei Rekursionsarten unterschieden: (1) Bei der direkten Rekursion ruft sich die Methode selber auf, (2) bei der indirekten Rekursion rufen sich zwei oder mehrere Methoden gegenseitig auf, d. h. Methode a() ruft Methode b() und umgekehrt. • Lokale Variablen werden bei jedem rekursiven Aufruf

erneut angelegt. • Es handelt sich bei der Rekursion um ein sehr

¨ leistungsfahiges Werkzeug, allerdings muss darauf geachtet werden, dass die Rekursion nach endlich vielen Schritten endet. • In vielen Fallen ¨ ist die Iteration mit einer Schleife effizienter.

16 / 18

Rekursion - Demo-Beispiele Beispiel Berechnung von x n , n ∈ N ( x n−1 · x, falls n > 0, n x = 1, sonst.

Beispiel Berechnung der Fibonacci–Zahlen f0 = 1, f1 = 1, fi

= fi−1 + fi−2

fur ¨ i ≥ 2.

17 / 18

Rekursion - Beispiel Fibonaccizahlen public class F i b o n a c c i { static int fibonacci ( int i ) { i f ( i