Grundkurs Programmieren in Java Band 1: Der Einstieg in Programmierung und Objektorientierung von Dietmar Ratz, Jens Scheffler, Detlef Seese 2. Auflage

Hanser München 2004 Verlag C.H. Beck im Internet: www.beck.de ISBN 978 3 446 22878 8

Zu Leseprobe schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG

Inhaltsverzeichnis Vorwort

15

1 Einleitung 1.1 Java – mehr als nur kalter Kaffee? . . . . . . . . . ¨ Anf¨anger – Das Konzept dieses Buches 1.2 Java fur 1.3 Weitere Infos und Kontakt zu den Autoren . . . 1.4 Verwendete Schreibweisen . . . . . . . . . . . . .

. . . .

17 17 18 19 20

2 Einige Grundbegriffe aus der Welt des Programmierens 2.1 Computer, Software, Informatik und das Internet . . . . . . . . . . 2.2 Was heißt Programmieren? . . . . . . . . . . . . . . . . . . . . . . .

21 21 24

I Einstieg in das Programmieren in Java

29

3 Aller Anfang ist schwer 3.1 Mein erstes Programm . . . . . . . . . . ¨ 3.2 Formeln, Ausdrucke und Anweisungen 3.3 Zahlenbeispiele . . . . . . . . . . . . . . 3.4 Verwendung von Variablen . . . . . . . 3.5 Auf den Schirm!“ . . . . . . . . . . . . ” ¨ . . . . . . . . . . . 3.6 Das Programmgerust ¨ ¨ 3.7 Eingeben, ubersetzen und ausfuhren . . ¨ 3.8 Ubungsaufgaben . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

31 31 32 33 34 34 35 36 38

4 Grundlagen der Programmierung in Java 4.1 Grundelemente eines Java-Programms . . . 4.1.1 Kommentare . . . . . . . . . . . . . 4.1.2 Bezeichner und Namen . . . . . . . 4.1.3 Literale . . . . . . . . . . . . . . . . . ¨ ¨ ¨ 4.1.4 Reservierte Worter, Schlusselw orter 4.1.5 Trennzeichen . . . . . . . . . . . . . 4.1.6 Interpunktionszeichen . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

39 39 41 43 44 45 45 46

. . . . . . . .

8

Inhaltsverzeichnis

4.2

4.3

4.4

4.5

4.1.7 Operatorsymbole . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.8 import-Anweisungen . . . . . . . . . . . . . . . . . . . . . . 4.1.9 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . ¨ 4.1.10 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . Erste Schritte in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Grundstruktur eines Java-Programms . . . . . . . . . . . . . 4.2.2 Ausgaben auf der Konsole . . . . . . . . . . . . . . . . . . . . 4.2.3 Eingaben von der Konsole . . . . . . . . . . . . . . . . . . . . ¨ 4.2.4 Schoner Programmieren in Java . . . . . . . . . . . . . . . . 4.2.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . ¨ 4.2.6 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . Einfache Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 Ganzzahlige Datentypen . . . . . . . . . . . . . . . . . . . . . 4.3.2 Gleitkommatypen . . . . . . . . . . . . . . . . . . . . . . . . ¨ Zeichen . . . . . . . . . . . . . . . . 4.3.3 Der Datentyp char fur 4.3.4 Zeichenketten . . . . . . . . . . . . . . . . . . . . . . . . . . . ¨ Wahrheitswerte . . . . . . . . . 4.3.5 Der Datentyp boolean fur 4.3.6 Implizite und explizite Typumwandlungen . . . . . . . . . . 4.3.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . ¨ 4.3.8 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . Der Umgang mit einfachen Datentypen . . . . . . . . . . . . . . . . 4.4.1 Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¨ 4.4.2 Operatoren und Ausdrucke . . . . . . . . . . . . . . . . . . . 4.4.2.1 Arithmetische Operatoren . . . . . . . . . . . . . . 4.4.2.2 Bitoperatoren . . . . . . . . . . . . . . . . . . . . . . 4.4.2.3 Zuweisungsoperator . . . . . . . . . . . . . . . . . 4.4.2.4 Vergleichsoperatoren und Logische Operatoren . . 4.4.2.5 Inkrement- und Dekrementoperatoren . . . . . . . 4.4.2.6 Priorit¨at und Auswertungsreihenfolge der Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . ¨ 4.4.3 Allgemeine Ausdrucke . . . . . . . . . . . . . . . . . . . . . 4.4.4 Ein- und Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . 4.4.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . ¨ 4.4.6 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . Anweisungen und Ablaufsteuerung . . . . . . . . . . . . . . . . . . 4.5.1 Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . ¨ 4.5.2 Blocke und ihre Struktur . . . . . . . . . . . . . . . . . . . . . 4.5.3 Entscheidungsanweisung . . . . . . . . . . . . . . . . . . . . 4.5.3.1 Die if-Anweisung . . . . . . . . . . . . . . . . . . 4.5.3.2 Die switch-Anweisung . . . . . . . . . . . . . . . 4.5.4 Wiederholungsanweisungen, Schleifen . . . . . . . . . . . . 4.5.4.1 Die for-Anweisung . . . . . . . . . . . . . . . . . . 4.5.4.2 Die while-Anweisung . . . . . . . . . . . . . . . . 4.5.4.3 Die do-Anweisung . . . . . . . . . . . . . . . . . .

47 47 48 48 49 50 51 53 53 54 55 55 56 57 59 60 60 60 62 62 63 64 67 68 70 72 74 75 76 77 78 80 80 83 84 84 85 85 86 88 88 89 90

Inhaltsverzeichnis

9

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

91 92 94 94

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

99 99 99 99 99 100 101 102 103 103 103 103 104 104 105 106 107 107 108 108 108 112 112

6 Referenzdatentypen 6.1 Felder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Was sind Felder ? . . . . . . . . . . . . . . . . . . . . . . . . 6.1.2 Deklaration, Erzeugung und Initialisierung von Feldern . 6.1.3 Felder unbekannter L¨ange . . . . . . . . . . . . . . . . . . . 6.1.4 Referenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.5 Ein besserer Terminkalender . . . . . . . . . . . . . . . . . 6.1.6 Mehrdimensionale Felder . . . . . . . . . . . . . . . . . . . 6.1.7 Mehrdimensionale Felder unterschiedlicher L¨ange . . . . 6.1.8 Vorsicht, Falle: Kopieren von mehrdimensionalen Feldern 6.1.9 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . ¨ 6.1.10 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 Was sind Klassen? . . . . . . . . . . . . . . . . . . . . . . . 6.2.2 Deklaration und Instantiierung von Klassen . . . . . . . .

. . . . . . . . . . . . . .

117 119 122 123 126 128 133 134 138 140 141 141 144 145 146

4.5.5 4.5.6 4.5.7

4.5.4.4 Endlosschleifen . . . . . . . . . . . Sprungbefehle und markierte Anweisungen Zusammenfassung . . . . . . . . . . . . . . . ¨ Ubungsaufgaben . . . . . . . . . . . . . . . .

5 Praxisbeispiele 5.1 Worum geht es in diesem Kapitel? . 5.2 Teilbarkeit zum Ersten . . . . . . . . 5.2.1 Aufgabenstellung . . . . . . . 5.2.2 Analyse des Problems . . . . 5.2.3 Algorithmische Beschreibung 5.2.4 Programmierung in Java . . . 5.2.5 Vorsicht, Falle! . . . . . . . . ¨ 5.2.6 Ubungsaufgaben . . . . . . . 5.3 Teilbarkeit zum Zweiten . . . . . . . 5.3.1 Aufgabenstellung . . . . . . . 5.3.2 Analyse des Problems . . . . 5.3.3 Algorithmische Beschreibung 5.3.4 Programmierung in Java . . . 5.3.5 Vorsicht, Falle! . . . . . . . . ¨ 5.3.6 Ubungsaufgaben . . . . . . . 5.4 Dreierlei . . . . . . . . . . . . . . . . 5.4.1 Aufgabenstellung . . . . . . . 5.4.2 Analyse des Problems . . . . 5.4.3 Algorithmische Beschreibung 5.4.4 Programmierung in Java . . . 5.4.5 Vorsicht, Falle! . . . . . . . . ¨ 5.4.6 Ubungsaufgaben . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

10

Inhaltsverzeichnis

6.2.3 6.2.4 6.2.5 6.2.6 6.2.7

Komponentenzugriff bei Objekten . . . . . . . . . . . . . . . Ein erstes Adressbuch . . . . . . . . . . . . . . . . . . . . . . Klassen als Referenzdatentyp . . . . . . . . . . . . . . . . . . Felder von Klassen . . . . . . . . . . . . . . . . . . . . . . . . Vorsicht, Falle: Kopieren von geschachtelten Referenzdatentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.8 Auslagern von Klassen . . . . . . . . . . . . . . . . . . . . . . 6.2.9 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . ¨ 6.2.10 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 7 Unterprogramme, Methoden 7.1 Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.1 Was sind Methoden? . . . . . . . . . . . . . . . . . . . . . . . 7.1.2 Deklaration von Methoden . . . . . . . . . . . . . . . . . . . ¨ ¨ 7.1.3 Parameterubergabe und -ruckgabe . . . . . . . . . . . . . . . 7.1.4 Aufruf von Methoden . . . . . . . . . . . . . . . . . . . . . . ¨ 7.1.5 Uberladen von Methoden . . . . . . . . . . . . . . . . . . . . 7.1.6 Vorsicht, Falle! . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.7 Sichtbarkeit und Verdecken von Variablen . . . . . . . . . . 7.1.8 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . ¨ 7.1.9 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Rekursiv definierte Methoden . . . . . . . . . . . . . . . . . . . . . . 7.2.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.2 Das Achtdamenproblem . . . . . . . . . . . . . . . . . . . . . 7.2.2.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . ¨ 7.2.2.2 Losungsidee . . . . . . . . . . . . . . . . . . . . . . 7.2.2.3 Erste Vorarbeiten: Die Methoden ausgabe und bedroht . . . . . . . . . . . . . . . . . . . . . . . . 7.2.2.4 Die Rekursion . . . . . . . . . . . . . . . . . . . . . ¨ 7.2.2.5 Die Losung . . . . . . . . . . . . . . . . . . . . . . . 7.2.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . ¨ 7.2.4 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 Die Methode main . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.1 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . ¨ 7.3.2 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 7.4 Methoden aus anderen Klassen aufrufen . . . . . . . . . . . . . . . . 7.4.1 Klassenmethoden . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.2 Die Methoden der Klasse java.lang.Math . . . . . . . . . 7.5 Methoden von Objekten aufrufen . . . . . . . . . . . . . . . . . . . . 7.5.1 Instanzmethoden . . . . . . . . . . . . . . . . . . . . . . . . . 7.5.2 Die Methoden der Klasse java.lang.String . . . . . . . ¨ 7.6 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

147 148 150 153 156 157 159 160 161 162 162 163 164 166 167 169 171 173 173 174 174 177 177 177 177 179 182 184 184 184 186 187 188 189 190 191 191 192 195

Inhaltsverzeichnis

8 Praxisbeispiele 8.1 Mastermind zum Ersten . . . . . . . . . . . . . 8.1.1 Aufgabenstellung . . . . . . . . . . . . . 8.1.2 Analyse des Problems . . . . . . . . . . 8.1.3 Unterteilen einer Zahl . . . . . . . . . . ¨ 8.1.4 Gultigkeit einer Zahl . . . . . . . . . . . ¨ 8.1.5 Finden einer gultigen Zahl . . . . . . . 8.1.6 Anzahl der Treffer . . . . . . . . . . . . 8.1.7 Ein- und Ausgabe . . . . . . . . . . . . 8.1.8 Zum Hauptprogramm . . . . . . . . . . ¨ 8.1.9 Das komplette Programm im Uberblick 8.2 Mastermind zum Zweiten . . . . . . . . . . . . 8.2.1 Aufgabenstellung . . . . . . . . . . . . . 8.2.2 Analyse des Problems . . . . . . . . . . 8.2.3 Verwendete Datenstrukturen . . . . . . 8.2.4 Vergleich der Versuche . . . . . . . . . . 8.2.5 Zum Hauptprogramm . . . . . . . . . . ¨ 8.2.6 Das komplette Programm im Uberblick 8.3 Black Jack . . . . . . . . . . . . . . . . . . . . . 8.3.1 Aufgabenstellung . . . . . . . . . . . . . 8.3.2 Analyse des Problems . . . . . . . . . . 8.3.3 Mischen eines Kartenspiels . . . . . . . 8.3.4 Die Pflichten des Gebers . . . . . . . . . 8.3.5 Zum Hauptprogramm . . . . . . . . . . ¨ 8.3.6 Das komplette Programm im Uberblick ¨ 8.3.7 Ubungsaufgaben . . . . . . . . . . . . .

11

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

II Objektorientiertes Programmieren in Java 9 Die objektorientierte Philosophie 9.1 Die Welt, in der wir leben . . . . . . . . . . . . . . . . . . . . 9.2 Programmierparadigmen – Objektorientierung im Vergleich 9.3 Die vier Grundpfeiler objektorientierter Programmierung . . 9.3.1 Generalisierung . . . . . . . . . . . . . . . . . . . . . . 9.3.2 Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.3 Kapselung . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.4 Polymorphismus . . . . . . . . . . . . . . . . . . . . . 9.3.5 Weitere wichtige Grundbegriffe . . . . . . . . . . . . . 9.4 Modellbildung – von der realen Welt in den Computer . . . 9.4.1 Grafisches Modellieren mit UML . . . . . . . . . . . . 9.4.2 CRC-Karten . . . . . . . . . . . . . . . . . . . . . . . . 9.4.3 Entwurfsmuster . . . . . . . . . . . . . . . . . . . . . . 9.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . ¨ 9.6 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . .

201 201 201 202 202 203 204 205 206 207 208 211 211 211 211 212 213 214 216 216 217 219 219 221 224 227

229 . . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

233 233 234 236 237 238 241 243 244 245 245 246 246 247 248

12

Inhaltsverzeichnis

10 Der grundlegende Umgang mit Klassen 10.1 Vom Referenzdatentyp zur Objektorientierung . . . . . 10.2 Instanzmethoden . . . . . . . . . . . . . . . . . . . . . . 10.2.1 Zugriffsrechte . . . . . . . . . . . . . . . . . . . . 10.2.2 Was sind Instanzmethoden? . . . . . . . . . . . . 10.2.3 Instanzmethoden zur Validierung von Eingaben 10.2.4 Instanzmethoden als erweiterte Funktionalit¨at . 10.3 Statische Komponenten einer Klasse . . . . . . . . . . . 10.3.1 Klassenvariablen und -methoden . . . . . . . . . 10.3.2 Konstanten . . . . . . . . . . . . . . . . . . . . . 10.4 Instantiierung und Initialisierung . . . . . . . . . . . . . 10.4.1 Konstruktoren . . . . . . . . . . . . . . . . . . . . ¨ 10.4.2 Uberladen von Konstruktoren . . . . . . . . . . 10.4.3 Der statische Initialisierer . . . . . . . . . . . . . 10.4.4 Der Mechanismus der Objekterzeugung . . . . . 10.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . ¨ 10.6 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

11 Vererbung und Polymorphismus 11.1 Wozu braucht man Vererbung? . . . . . . . . 11.1.1 Aufgabenstellung . . . . . . . . . . . . 11.1.2 Analyse des Problems . . . . . . . . . 11.1.3 Ein erster Ansatz . . . . . . . . . . . . ¨ sich . . . . . . . . . . . 11.1.4 Eine Klasse fur 11.1.5 St¨arken der Vererbung . . . . . . . . . ¨ 11.1.6 Ubungsaufgaben . . . . . . . . . . . . 11.2 Die super-Referenz . . . . . . . . . . . . . . ¨ 11.3 Uberschreiben von Methoden und Variablen 11.4 Die Klasse java.lang.Object . . . . . . . ¨ 11.5 Ubungsaufgaben . . . . . . . . . . . . . . . . 11.6 Abstrakte Klassen und Interfaces . . . . . . . ¨ 11.7 Ubungsaufgaben . . . . . . . . . . . . . . . . 11.8 Weiteres zum Thema Objektorientierung . . 11.8.1 Erstellen von Paketen . . . . . . . . . 11.8.2 Zugriffsrechte . . . . . . . . . . . . . . 11.8.3 Innere Klassen . . . . . . . . . . . . . 11.8.4 Anonyme Klassen . . . . . . . . . . . 11.9 Zusammenfassung . . . . . . . . . . . . . . . ¨ 11.10 Ubungsaufgaben . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

251 251 253 253 254 257 259 260 260 263 266 266 268 270 273 278 279

. . . . . . . . . . . . . . . . . . . .

299 299 299 300 300 301 302 305 307 308 310 313 314 317 323 323 324 325 330 332 333

12 Praxisbeispiele 345 12.1 Streng geheim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 12.1.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . 345 12.1.2 Analyse des Problems . . . . . . . . . . . . . . . . . . . . . . 346

Inhaltsverzeichnis

13

¨ 12.1.3 Verschlusselung durch Aufbl¨ahen . . . . . . . . . . . . . . . ¨ 12.1.4 XOR-Verschlusselung . . . . . . . . . . . . . . . . . . . . . . 12.1.5 Ein einfacher Test . . . . . . . . . . . . . . . . . . . . . . . . . ¨ 12.1.6 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 12.2 Mastermind zum Dritten . . . . . . . . . . . . . . . . . . . . . . . . . 12.2.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . 12.2.2 Die Klassen GameModel und GameEngine . . . . . . . . . . 12.2.3 Wir bauen ein Modell . . . . . . . . . . . . . . . . . . . . . . 12.2.3.1 Grundlegende Datenstruktur . . . . . . . . . . . . 12.2.3.2 Implementierung des Interfaces, Teil 1 . . . . . . . 12.2.3.3 Implementierung des Interfaces, Teil 2 . . . . . . . 12.2.4 Programmstart . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2.5 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¨ 12.2.6 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 12.3 Game of Life . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.2 Designphase . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.3 Die Klasse Zelle . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.4 Die Klasse Petrischale . . . . . . . . . . . . . . . . . . . . 12.3.4.1 Interne Struktur und einfacher Datenzugriff . . . . 12.3.4.2 Erster Konstruktor: Zuf¨allige Belegung der Zellen 12.3.4.3 Zweiter Konstruktor: Die neue Generation . . . . . ¨ 12.3.4.4 Die komplette Klasse im Uberblick . . . . . . . . . 12.3.5 Die Klasse Life . . . . . . . . . . . . . . . . . . . . . . . . . 12.3.6 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¨ 12.3.7 Ubungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 13 Exceptions und Errors ¨ 13.1 Eine Einfuhrung in Exceptions . . . . . . . 13.1.1 Was ist eine Exception? . . . . . . . ¨ 13.1.2 Ubungsaufgaben . . . . . . . . . . . 13.1.3 Abfangen von Exceptions . . . . . . 13.1.4 Ein Anwendungsbeispiel . . . . . . 13.1.5 Die RuntimeException . . . . . . ¨ 13.1.6 Ubungsaufgaben . . . . . . . . . . . ¨ Fortgeschrittene . . . . . . . 13.2 Exceptions fur 13.2.1 Definieren eigener Exceptions . . . . ¨ 13.2.2 Ubungsaufgaben . . . . . . . . . . . 13.2.3 Vererbung und Exceptions . . . . . 13.2.4 Vorsicht, Falle! . . . . . . . . . . . . 13.2.5 Der finally-Block . . . . . . . . . 13.2.6 Die Klassen Throwable und Error 13.2.7 Zusammenfassung . . . . . . . . . . ¨ 13.2.8 Ubungsaufgaben . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

347 349 351 353 354 354 354 358 358 359 360 362 363 364 364 364 365 368 370 370 371 374 375 377 379 380 383 384 384 386 386 388 391 393 396 396 398 399 403 404 409 411 411

14

Inhaltsverzeichnis

13.3 Assertions . . . . . . . . . . . . . . . . . . 13.3.1 Zusicherungen im Programmcode 13.3.2 Compilieren des Programmcodes ¨ 13.3.3 Ausfuhren des Programmcodes . 13.3.4 Zusammenfassung . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

412 412 413 414 414

14 Zu guter Letzt . . . 415 14.1 Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 14.2 Sortieren von Feldern . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 14.3 Grafische Oberfl¨achen in Java . . . . . . . . . . . . . . . . . . . . . . 421 A Der Weg zum guten Programmierer . . . 429 A.1 Die goldenen Regeln der Code-Formatierung . . . . . . . . . . . . . 430 A.2 Die goldenen Regeln der Namensgebung . . . . . . . . . . . . . . . 433 A.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 B Die IOTools – Tastatureingaben in Java 439 B.1 Kurzbeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 B.2 Anwendung der IOTools-Methoden . . . . . . . . . . . . . . . . . . 440 C Einige Neuerungen in Java 5.0 C.1 Vereinfachte Schleifen-Notation . . . . . . . . . . . . . C.2 Variable Argument-Anzahl bei Methoden . . . . . . . C.3 Formatierte Ausgabe . . . . . . . . . . . . . . . . . . . C.4 Vereinfachte Eingabe . . . . . . . . . . . . . . . . . . . C.5 Statische Importe . . . . . . . . . . . . . . . . . . . . . C.6 Aufz¨ahlungstypen . . . . . . . . . . . . . . . . . . . . C.7 Generische Datentypen . . . . . . . . . . . . . . . . . . ¨ die Wrapper-Klassen C.8 Automatische Typwandlung fur

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

443 444 445 446 446 447 448 451 457

D Glossar

459

Literaturverzeichnis

469

Stichwortverzeichnis

471