Vorwort | 6 |
Inhaltsverzeichnis | 9 |
Tabellenverzeichnis | 16 |
Abbildungsverzeichnis | 18 |
Kapitel 1 Der objektorientierte Ansatz | 20 |
1.1 Ein einführendes Beispiel | 21 |
1.1.1 Aktive Objekte | 23 |
1.1.2 Klassifikation | 23 |
1.1.3 Datenkapselung | 25 |
1.2 OOP im Überblick | 25 |
1.3 Programmaufbau | 26 |
1.4 Java verwenden | 29 |
1.4.1 Umgebung | 30 |
1.4.2 Syntaxdiagramme | 32 |
1.4.3 Das Hilfspaket simple | 33 |
1.5 Gestaltung und Formatierung von Java-Quelltext | 33 |
Kapitel 2 Elementare Objekte und Ausdrücke | 36 |
2.1 Behandlung von String Objekten | 36 |
2.1.1 Zeichenketten als Objekte der Klasse StringBuffer | 37 |
2.1.2 Zeichenketten als Objekte der Klasse String | 38 |
2.1.3 Aufgaben | 42 |
2.2 Deklaration von Variablen und Konstanten | 43 |
2.3 Namen in Java | 46 |
2.4 Konstruktion von Objekten | 48 |
2.5 Aufruf von Methoden | 49 |
2.6 Einfache Ein- und Ausgabe | 50 |
2.6.1 Ausgabe mit System.out | 50 |
2.6.2 Eingabe über Kommandozeile | 51 |
2.6.3 Eingabe mit SimpleInput.in | 51 |
2.6.4 Kommandozeilen-Eingabe mit SimpleInput | 52 |
2.6.5 Ausnahmen und Fehler | 52 |
2.7 Die Zuweisung bei Wert- und Referenzsemantik | 53 |
2.7.1 Wert und Referenz | 53 |
2.8 Datentypen | 57 |
2.8.1 Klassentypen | 57 |
2.8.2 Elementare Datentypen | 57 |
2.8.3 Array-Typen | 58 |
2.9 Typ Konversion | 58 |
2.9.1 Numerische Typanpassung | 58 |
2.10 Numerische Typen | 60 |
2.10.1 Ganze Zahlen | 61 |
2.10.2 Realzahlen | 62 |
2.10.3 Operatoren im Überblick | 64 |
2.11 Syntax der Ausdrücke | 65 |
2.11.1 Typspezifische Ausdrücke | 65 |
2.11.2 Numerische Ausdrücke | 66 |
2.12 Ganzzahlige Ausdrücke | 67 |
2.12.1 Akkumulierende Zuweisungen | 68 |
2.12.2 Shift-Operationen | 68 |
2.13 Reelle Ausdrücke | 70 |
2.14 Boolesche Ausdrücke, Bedingungen | 72 |
2.15 Vergleiche von Werten und Objekten | 74 |
2.15.1 Vergleich von Zahlen | 74 |
2.15.2 Objektvergleich | 74 |
2.16 Der bedingte Ausdruck | 75 |
2.17 Die Klasse System | 75 |
2.18 Import von Klassen und Paketen | 76 |
2.18.1 Importklausel | 77 |
2.19 Auftreten von Ausnahmen | 79 |
2.19.1 Fehlerabbruch | 80 |
Kapitel 3 Vereinbarung neuer Klassen | 82 |
3.1 Überblick | 83 |
3.1.1 Attribute | 83 |
3.1.2 Methoden | 84 |
3.1.3 Konstruktoren | 84 |
3.2 Entwurf einer Klasse | 84 |
3.3 Klassendeklaration | 88 |
3.4 Attributvereinbarung | 90 |
3.5 Konstruktion von Objekten | 91 |
3.5.1 Vereinbarung von Konstruktoren | 92 |
3.6 Deklaration von Methoden | 94 |
3.7 Methodenaufruf | 97 |
3.8 Redefinition bekannter Methoden | 98 |
3.8.1 Objektvergleich | 99 |
3.9 Aufgaben mit Klassen | 100 |
3.9.1 Aufbau und Test von Programmen | 100 |
3.10 Klassenattribute | 101 |
3.11 Aufzählungen | 104 |
3.11.1 Aufzählungstypen | 105 |
3.12 Klassenmethoden | 107 |
3.13 Arrays als Datenstruktur bzw. -typ | 108 |
3.13.1 Array-Objekte und ihre Elemente | 109 |
3.13.2 Array-Typ und Vereinbarung | 110 |
3.13.3 Mehrdimensionale Arrays | 112 |
3.13.4 Kopieren von Arrays | 113 |
3.13.5 char-Felder (Zeichenketten) vs. Strings | 113 |
3.13.6 Mögliche Fehler bei Arrayzugriffen | 114 |
Kapitel 4 Algorithmen und Anweisungen | 116 |
Aufgabentyp 1: Folgenberechnung | 116 |
Aufgabentyp 2: Abbildung, Durchlauf | 117 |
Aufgabentyp 3: Akkumulation, Reduktion | 118 |
4.1 Iteration | 118 |
4.1.1 Folgenberechnung | 118 |
4.1.2 Akkumulation | 122 |
4.1.3 Durchlaufen einer Menge | 123 |
4.2 Schleifen | 123 |
4.2.1 while-Schleife | 124 |
4.2.2 do-Schleife | 124 |
4.2.3 for-Schleife | 125 |
4.2.4 Allgemeine for-Schleife | 127 |
4.3 Bedingte Anweisungen | 129 |
4.4 Funktionen | 131 |
4.5 Rekursion | 132 |
4.5.1 Rekursive Algorithmen und Funktionen | 132 |
4.5.2 Weitere Beispiele für Rekursion | 135 |
4.6 Fallunterscheidung | 137 |
4.7 Verlassen von Konstrukten | 140 |
4.7.1 return-Anweisung | 140 |
Kapitel 5 Programmieren durch Vertrag | 144 |
5.1 Abstrakte Datentypen | 146 |
5.2 Der abstrakte Datentyp Liste | 149 |
5.2.1 Eine Liste ganzer Zahlen | 150 |
5.2.2 Drei Sichten | 150 |
5.3 Ein Array als Liste | 151 |
5.3.1 Ringliste | 153 |
5.4 Eine verkettete Liste | 154 |
5.4.1 Einführung | 154 |
5.4.2 Veranschaulichung von Listenoperationen | 156 |
5.4.3 Implementierung von verketteten Listen | 157 |
5.4.4 Diskussion, Kritik | 159 |
5.5 Eine rekursive Liste | 159 |
5.5.1 Rekursive Datenstruktur | 159 |
5.5.2 Rekursive Methoden | 160 |
5.6 Datenkapselung | 161 |
5.6.1 Öffentliche und geschützte Komponenten | 161 |
5.6.2 Klasseninvarianten | 163 |
5.7 Export | 165 |
5.8 Datenkapselung in Paketen | 167 |
5.9 Innere Klassen | 171 |
5.9.1 Statische Innere Klassen | 172 |
5.10 Interfaces | 173 |
5.10.1 Interfaces als abstrakte Datentypen | 173 |
5.10.2 Listen als Interface | 174 |
5.10.3 Referenzen auf Schnittstellen. | 176 |
5.10.4 Markierungs-Interface | 177 |
5.11 Import von Interfaces und Konstanten | 178 |
5.12 Listenaufgaben | 178 |
5.12.1 Einführung | 178 |
5.12.2 Aufgaben für einfach verkettete Listen | 178 |
5.12.3 Aufgaben für doppelt verkettete Listen | 180 |
5.13 Funktionsobjekte | 180 |
5.14 Objekte anonymer Klassen | 183 |
5.15 Iterator | 184 |
5.15.1 Ein Listeniterator | 185 |
5.15.2 Ein Listeniterator im Paket | 186 |
5.15.3 Ein Listeniterator als innere Klasse | 187 |
5.15.4 Ein Listeniterator als abstrakte Klasse | 188 |
5.15.5 Iteratoren in Standardpaketen | 190 |
Kapitel 6 Entwurf von weiterverwertbaren Klassen | 192 |
6.1 Beispiele zur Vererbung | 193 |
6.1.1 Spezialisierung | 193 |
6.1.2 Generalisierung | 194 |
6.1.3 Hierarchien | 195 |
6.1.4 Polymorphie | 196 |
6.2 Erweitern von Klassen | 198 |
6.2.1 Regeln und Beispiele | 200 |
6.3 Untervertrag | 203 |
6.3.1 Unterverträge | 203 |
6.4 Die Java Klassenhierarchie | 204 |
6.4.1 Typanpassung | 205 |
6.4.2 Allgemeine Listen von Objekten | 206 |
6.5 Erweitern von Interfaces | 208 |
6.6 Polymorphie | 209 |
6.6.1 Polymorphie | 209 |
6.6.2 Dynamisches Binden | 210 |
6.6.3 Heterogene Listen | 211 |
6.7 Abstrakte Klassen | 213 |
6.8 Aufgaben zur Vererbung | 215 |
Kapitel 7 Java Standardpakete | 218 |
7.1 Hüllklassen | 219 |
7.1.1 Konversion mit Strings | 221 |
7.1.2 Hüllklasse Integer | 221 |
7.1.3 Hüllklasse Double | 222 |
7.2 Klonen von Objekten | 222 |
7.3 Datum | 223 |
7.3.1 Die Klasse Date | 223 |
7.3.2 Die Klasse GregorianCalendar | 224 |
7.4 Container | 225 |
7.4.1 Delegation | 225 |
7.4.2 Listen | 227 |
7.4.3 Mengen | 229 |
7.4.4 Schlüssellisten, Wörterbücher | 230 |
Kapitel 8 Generische Typen | 232 |
8.1 Homogene Standardcontainer | 233 |
8.1.1 Listen | 234 |
8.1.2 Schlüssellisten, Wörterbücher | 235 |
8.2 Vereinbarung von Typ-parametrisierten Containern | 237 |
8.2.1 Syntax | 239 |
8.3 Parametrisierte Typen | 241 |
8.3.1 Generizität und Vererbung | 241 |
8.3.2 Unbeschränkte Generizität | 244 |
8.3.3 Generizität und Arrays | 245 |
8.3.4 Typausprägungen | 246 |
8.4 Generische Methoden | 247 |
8.4.1 Parametrisierte Parameterlisten | 247 |
8.4.2 Typ-parametrisierte Methoden | 248 |
Kapitel 9 Ausnahmen | 250 |
9.1 Ausnahmen | 250 |
9.2 Ausnahmebehandlung | 251 |
9.3 Ausnahmeklassen | 253 |
9.3.1 Ausnahmehierarchie | 253 |
9.4 Definition eigener Ausnahmen | 254 |
9.4.1 Erweitern der Ausnahmehierarchie | 254 |
9.4.2 Auslösen von Ausnahmen | 254 |
9.5 Ausnahmen und Vererbung | 255 |
Kapitel 10 Ein- und Ausgabe | 256 |
10.1 Byteweise Ein-/Ausgabe | 256 |
10.2 Zeichenweise Ein-/Ausgabe | 259 |
10.3 Serialisierung | 260 |
10.4 Tokenizer | 261 |
10.5 SimpleInput | 262 |
Kapitel 11 Grafische Benutzeroberflächen | 266 |
11.1 Bedienung | 266 |
11.2 Programmierung | 267 |
11.3 Komponenten | 268 |
11.3.1 Grundkomponenten | 269 |
11.3.2 Container | 270 |
11.4 Ereignisbehandlung | 271 |
11.4.1 Ereignis-Hierarchie | 272 |
11.4.2 Anonyme Beobachterklassen | 275 |
11.5 Layout | 275 |
11.6 Beispiel | 277 |
Kapitel 12 Applets | 282 |
12.1 JApplet | 285 |
Kapitel 13 Eigenständige Handlungsstränge | 286 |
13.1 Konstruktion | 287 |
13.2 Monitore | 288 |
13.3 Kommunikation | 290 |
Anhang | 292 |
Anhang A Das Java2 Software Development Kit | 292 |
A.1 Installation | 292 |
A.2 Der Compiler | 294 |
A.3 Der Interpreter | 295 |
A.4 Das Werkzeug jar | 296 |
A.5 Dokumentation erzeugen mit javadoc | 297 |
Anhang B Das interaktive Lernsystem | 298 |
B.1 Das gedruckte Buch | 298 |
B.2 Das Buch als HTML-Version | 300 |
B.3 JEEE | 301 |
B.4 Die Bibliothek simple | 304 |
B.5 Entwicklungswerkzeuge | 306 |
Anhang C Syntax im Überblick | 308 |
C.1 Die gesamte Sprache | 308 |
C.2 Java 1.5 Erweiterungen | 322 |
C.2.1 Generische Typen | 322 |
C.2.2 Anweisungen | 325 |
C.2.3 Weitere Änderungen | 325 |
Anhang D Gestaltung und Formatierung von Java-Quelltext | 326 |
D.1 Struktur | 326 |
D.2 Kommentare | 327 |
D.3 Formatierung | 331 |
D.4 Deklarationen | 334 |
D.5 Anweisungen | 335 |
Anhang E Lösungen der Aufgaben | 338 |
Index | 344 |