lehrerbibliothek.deDatenschutzerklärung
Java ist auch eine Insel Programmieren für die Java 2-Plattform in der Version 1.4, mit CD
Java ist auch eine Insel
Programmieren für die Java 2-Plattform in der Version 1.4, mit CD




Christian Ullenboom

Galileo Press
EAN: 9783898423656 (ISBN: 3-89842-365-4)
1342 Seiten, hardcover, 19 x 24cm, Mai, 2003

EUR 49,90
alle Angaben ohne Gewähr

Umschlagtext
Dieses Buch bietet ambitionierten Java-Einsteigern einen kompakten Überblick über alle wichtigen Gebiete der Java-Programmierung. Alle Kapitel sind für Anfänger als auch für fortgeschrittene Java-Entwickler konzipiert, wobei Kenntnisse einer strukturierten Programmiersprache wie C(++), Delphi oder Visual Basic und ein Verständnis für objektorientierte Technologien hilfreich sind. Die "Insel" ist umfassend und bietet alles, was ein Komependium leisten kann; sie genießt inzwischen Kult-Status bei unzähligen Java-Anhängern. Ergänzt wird das Buch durch eine intelligente HTML-Version des gesamten Textes unter www.galileocomputing.de.



1 Sind Sie reif für die "Insel"?

Hier lernen Sie die Sprache Java mit all Ihren Merkmalen und Möglichkeiten.



2 Java-Grundlagen verstehen

Von einer Sprachbeschreibung über Klassen und Objekte bis hin zu Zeichenketten. Kompaktes Grundlagenwissen befähigt Sie zu mehr.



3 Profitieren Sie von praxisnahen Beispielen

Nicht nur lesen, sondern selbst entwickeln und nachvollziehen. Hier gibt es Theorie immer nur mit Praxis.



4 Kennen Sie das AWT, Swing, Servlets oder JSP?

Hier erhalten Sie wertvolles Profiwissen, um mit diesen Techniken zu arbeiten.



5 RMI, SOAP und XML bleiben kein Geheimnis

Verteilte Anwendungen programmieren und das Zusammenspiel von Java und XML verstehen.



6 Eclipse macht das Rennen

Neu in dieser Auflage sind Ausführungen zur Open Source-Plattform Eclipse.



7 Die Java-Insel ist Ihr Begleiter

Als Lehr- und Arbeitsbuch oder als Referenz ist die Insel geeignet. Kurz: Das umfassende Handbuch für Einsteiger und Profis!



Die CD-ROM

- Eine vollständige HTML-Version des Buches zum guten Navigieren und Finden

- Über 300 Aufgaben und Lösungen

- Alle Codebeispiele

- Java 2 SDK 1.4

- Entwicklungsumgebungen und Zusatz-Tools: Eclipse, TogetherJ, IntelliJ, NetBeans, Jikes, Tomcat, JDOM
Verlagsinfo
Sind Sie reif für die Insel? Dies ist die 3. Auflage des Java-Standardwerkes:
vollständig durchgesehen und überarbeitet - inklusive Ausführungen zu Eclipse und Ant.
Besonders Einsteiger mit Programmierkenntnissen, aber auch fortgeschrittene Java-Programmierer profitieren von diesem umfassenden Werk. Die Einführung in die Sprache Java ist kompakt und anschaulich. Schnell geht es weiter mit fortgeschrittenen Themen wie Threads, Swing, Netzwerkprogrammierung, Java Beans, RMI, XML und Java, Servlets und Java Server Pages, JDBC und vielem mehr. Natürlich können Sie dieses Buch als Nachschlagewerk nutzen; unterstützt werden Sie zusätzlich durch die intelligente HTML-Fassung auf der Buch-CD und im Internet.
Inhaltsverzeichnis
Vorwort ... 33
Vorwort Version 2.0 ... 43
Vorwort Version 3.0 ... 43


1 ... Schon wieder eine neue Sprache? 45
1.1 ... Der erste Kontakt ... 47
1.2 ... Historischer Hintergrund ... 47
1.3 ... Eigenschaften von Java ... 49
1.3.1 ... Bytecode und die virtuelle Maschine ... 49
1.3.2 ... Kein Präprozessor ... 51
1.3.3 ... Keine überladenen Operatoren ... 52
1.3.4 ... Zeiger und Referenzen ... 52
1.3.5 ... Bring den Müll raus, Garbage- Collector ... 53
1.3.6 ... Ausnahmenbehandlung ... 53
1.3.7 ... Objektorientierung in Java ... 54
1.3.8 ... Java-Security-Model ... 54
1.3.9 ... Wofür Java nicht geeignet ist ... 55
1.4 ... Java im Vergleich zu anderen Sprachen ... 55
1.4.1 ... Java und JavaScript ... 56
1.4.2 ... Normierungsversuche ... 56
1.5 ... Die Rolle von Java im Web ... 56
1.6 ... Aufkommen von Stand-alone- Applikationen ... 57
1.7 ... Entwicklungs- und Laufzeitumgebungen ... 57
1.7.1 ... Aller Anfang mit dem Java SDK ... 57
1.7.2 ... Die Entwicklungsumgebung von Sun: Sun ONE Studie (früher Forte) und NetBeans ... 58
1.7.3 ... Jikes und Eclipse von IBM ... 58
1.7.4 ... JBuilder von Borland ... 60
1.7.5 ... Together ... 60
1.7.6 ... Die virtuelle Maschine Kaffe von Transvirtual Technologies ... 60
1.7.7 ... Ein Wort zu Microsoft, Java und zu J++ 61
1.7.8 ... Direkt ausführbare Programme ... 62
1.8 ... Installationsanleitung für das Java 2 SDK unter Microsoft Windows ... 62
1.8.1 ... Das Java 2 SDK beziehen ... 63
1.8.2 ... Java SDK installieren ... 63
1.8.3 ... Compiler und Interpreter nutzen ... 63
1.9 ... Das erste Programm compilieren und testen ... 64
1.9.1 ... Häufige Compiler- und Interpreterprobleme ... 66
1.10 ... Eclipse ... 67
1.10.1 ... Eclipse starten ... 67
1.10.2 ... Das erste Projekt anlegen ... 67
1.10.3 ... Eine Klasse hinzufügen ... 68
1.10.4 ... Übersetzen und Ausführen ... 68
1.10.5 ... Nutzen des JDK und Starten ohne Bestätigungsdialog ... 70
2 ... Sprachbeschreibung ... 73
2.1 ... Anweisungen und Programme ... 75
2.2 ... Programme ... 77
2.2.1 ... Kommentare ... 79
2.2.2 ... Funktionsaufrufe als Anweisungen ... 80
2.2.3 ... Die leere Anweisung ... 82
2.2.4 ... Der Block ... 82
2.3 ... Elemente einer Programmiersprache ... 83
2.3.1 ... Textkodierung durch Unicode- Zeichen ... 83
2.3.2 ... Unicode-Tabellen unter Windows ... 84
2.3.3 ... Bezeichner ... 85
2.3.4 ... Reservierte Schlüsselwörter ... 86
2.3.5 ... Token ... 87
2.3.6 ... Semantik ... 87
2.4 ... Datentypen ... 87
2.4.1 ... Primitive Datentypen ... 88
2.4.2 ... Wahrheitswerte ... 89
2.4.3 ... Variablendeklarationen ... 89
2.4.4 ... Ganzzahlige Datentypen ... 91
2.4.5 ... Die Fließkommazahlen ... 92
2.4.6 ... Zeichen ... 93
2.4.7 ... Die Typanpassung (das Casting) 94
2.4.8 ... Lokale Variablen, Blöcke und Sichtbarkeit ... 97
2.4.9 ... Initialisierung von lokalen Variablen ... 98
2.5 ... Ausdrücke ... 99
2.5.1 ... Zuweisungsoperator und Verbundoperator ... 100
2.5.2 ... Präfix- oder Postfix- Inkrement und -Dekrement ... 101
2.5.3 ... Unäres Minus und Plus ... 102
2.5.4 ... Arithmetische Operatoren ... 103
2.5.5 ... Die relationalen Operatoren ... 106
2.5.6 ... Logische Operatoren ... 106
2.5.7 ... Reihenfolge und Rang der Operatoren in der Auswertungsreihenfolge ... 107
2.5.8 ... Was C(++)-Programmierer vermissen könnten ... 110
2.6 ... Bedingte Anweisungen oder Fallunterscheidungen ... 110
2.6.1 ... Die if-Anweisung ... 110
2.6.2 ... Die Alternative wählen mit einer if/else-Anweisung ... 112
2.6.3 ... Die switch-Anweisung bietet die Alternative ... 114
2.7 ... Schleifen ... 117
2.7.1 ... Die while-Schleife ... 117
2.7.2 ... Schleifenbedingungen und Vergleiche mit == 118
2.7.3 ... Die do/while-Schleife ... 119
2.7.4 ... Die for-Schleife ... 120
2.7.5 ... Ausbruch planen mit break und Wiedereinstieg mit continue ... 124
2.7.6 ... break und continue mit Sprungmarken ... 125
2.8 ... Methoden einer Klasse ... 126
2.8.1 ... Bestandteil einer Funktion ... 127
2.8.2 ... Aufruf ... 128
2.8.3 ... Methoden ohne Parameter ... 129
2.8.4 ... Statische Methoden (Klassenmethoden) 130
2.8.5 ... Parameter und Wertübergabe ... 130
2.8.6 ... Methoden vorzeitig mit return beenden ... 131
2.8.7 ... Nicht erreichbarer Quellcode bei Funktionen ... 132
2.8.8 ... Rückgabewerte ... 132
2.8.9 ... Methoden überladen ... 136
2.8.10 ... Vorinitialisierte Parameter bei Funktionen ... 138
2.8.11 ... Finale lokale Variablen ... 138
2.8.12 ... Finale Referenzen in Objekten und das fehlende const ... 139
2.8.13 ... Rekursive Funktionen ... 140
2.8.14 ... Die Ackermann-Funktion ... 143
2.8.15 ... Die Türme von Hanoi ... 145
2.9 ... Weitere Operatoren ... 147
2.9.1 ... Bitoperationen ... 147
2.9.2 ... Vorzeichenlose Bytes in ein Integer und Char konvertieren ... 148
2.9.3 ... Variablen mit Xor vertauschen ... 149
2.9.4 ... Die Verschiebeoperatoren ... 149
2.9.5 ... Setzen, Löschen, Umdrehen und Testen von Bits ... 152
2.9.6 ... Der Bedingungsoperator ... 153
2.9.7 ... Überladenes Plus für Strings ... 155
2.10 ... Einfache Benutzereingaben ... 156
3 ... Klassen und Objekte ... 159
3.1 ... Objektorientierte Programmierung ... 161
3.1.1 ... Warum überhaupt OOP? 161
3.1.2 ... Modularität und Wiederverwertbarkeit ... 162
3.2 ... Klassen benutzen ... 162
3.2.1 ... Die Klasse Point ... 163
3.2.2 ... Etwas über die UML ... 163
3.2.3 ... Anlegen eines Exemplars einer Klasse ... 165
3.2.4 ... Zugriff auf Variablen und Methoden mit dem Punkt ... 166
3.2.5 ... Konstruktoren ... 168
3.2.6 ... Die null-Referenz ... 169
3.3 ... Die API-Dokumentation ... 170
3.4 ... Mit Referenzen arbeiten ... 171
3.4.1 ... Zuweisungen bei Referenzen ... 171
3.4.2 ... Funktionen mit nichtprimitiven Parametern ... 172
3.4.3 ... Gleichheit von Objekten und die Methode equals() 173
3.5 ... Arrays ... 175
3.5.1 ... Deklaration von Arrays ... 176
3.5.2 ... Arrays mit Inhalt ... 177
3.5.3 ... Die Länge eines Arrays über das Attribut length ... 178
3.5.4 ... Zugriff auf die Elemente ... 178
3.5.5 ... Array-Objekte erzeugen ... 179
3.5.6 ... Fehler bei Arrays ... 180
3.5.7 ... Arrays mit nichtprimitiven Elementen ... 181
3.5.8 ... Arrays und Objekte ... 181
3.5.9 ... Initialisierte Array- Objekte ... 182
3.5.10 ... Mehrdimensionale Arrays ... 183
3.5.11 ... Die Wahrheit über die Array- Initialisierung ... 186
3.5.12 ... Arrays kopieren und füllen ... 187
3.5.13 ... Mehrere Rückgabeparameter ... 188
3.5.14 ... Parameter per Referenz übergeben ... 188
3.5.15 ... Der Einstiegspunkt für das Laufzeitsystem ... 189
3.5.16 ... Der Rückgabewert von main() 190
3.5.17 ... Die Klasse Arrays ... 190
4 ... Der Umgang mit Zeichenketten ... 191
4.1 ... Strings und deren Anwendung ... 193
4.1.1 ... String-Objekte für konstante Zeichenketten ... 193
4.1.2 ... String-Länge ... 195
4.1.3 ... Gut, dass wir verglichen haben ... 195
4.1.4 ... String-Teile extrahieren ... 198
4.1.5 ... Suchen und Ersetzen ... 200
4.1.6 ... Veränderte Strings liefern ... 203
4.1.7 ... Typen in Zeichenketten konvertieren ... 205
4.2 ... Veränderbare Zeichenketten mit der Klasse StringBuffer ... 206
4.2.1 ... Anlegen von StringBuffer- Objekten ... 206
4.2.2 ... Die Länge eines StringBuffer- Objekts lesen und setzen ... 207
4.2.3 ... Daten anhängen ... 208
4.2.4 ... Zeichen(folgen) setzen, erfragen, löschen und umdrehen ... 208
4.3 ... Vergleiche von Zeichenketten als String und StringBuffer ... 209
4.3.1 ... Sollte es ein equals() und hash() bei StringBuffer geben? 210
4.4 ... Zeichenkodierungen umwandeln ... 210
4.5 ... Sprachabhängiges Vergleichen mit der Collator-Klasse ... 211
4.5.1 ... Effiziente interne Speicherung für die Sortierung ... 213
4.6 ... Die Klasse StringTokenizer ... 214
4.7 ... StreamTokenizer ... 217
4.8 ... Der BreakIterator als Wort- und Satztrenner ... 220
4.9 ... Formatieren mit Format- Objekten ... 222
4.9.1 ... Prozente, Zahlen und Währungen ausgeben ... 223
4.9.2 ... Ausgaben formatieren ... 224
4.9.3 ... Dezimalzahlformatierung ... 226
4.10 ... Reguläre Ausdrücke ... 228
4.10.1 ... Splitten von Zeichenketten ... 229
4.10.2 ... split() in String ... 230
4.10.3 ... Das Paket org.apache.regexp ... 230
5 ... Mathematisches ... 231
5.1 ... Arithmetik in Java ... 233
5.1.1 ... Java-Sondertypen im Beispiel ... 233
5.1.2 ... Soll eine Division durch Null zur Übersetzungszeit erkannt werden? 234
5.2 ... Die Funktionen der Math- Klasse ... 234
5.2.1 ... Attribute ... 235
5.2.2 ... Winkelfunktionen (trigonometrische Funktionen und Arcus- Funktionen) 235
5.2.3 ... Runden von Werten ... 236
5.2.4 ... Der Logarithmus ... 237
5.2.5 ... Exponentialfunktionen ... 238
5.2.6 ... Division ... 238
5.2.7 ... Absolutwerte und Maximum, Minimum ... 239
5.2.8 ... Zufallszahlen ... 239
5.3 ... Mathe bitte strikt ... 239
5.3.1 ... Strikt Fließkomma mit strictfp ... 240
5.3.2 ... Die Klassen Math und StrictMath ... 240
5.4 ... Die Random-Klasse ... 240
5.5 ... Große Zahlen ... 242
5.5.1 ... Die Klasse BigInteger ... 242
5.5.2 ... Funktionen von BigInteger ... 244
5.5.3 ... Ganz lange Fakultäten ... 246
5.6 ... Probleme mit Java und der Mathematik ... 247
5.7 ... Das Java-Matrixpaket Jama ... 248
6 ... Eigene Klassen schreiben ... 251
6.1 ... Eigene Klassen definieren ... 253
6.1.1 ... Methodenaufrufe und Nebeneffekte ... 254
6.1.2 ... Argumentübergabe mit Referenzen ... 255
6.1.3 ... Die this-Referenz ... 256
6.1.4 ... Überdeckte Objektvariablen nutzen ... 257
6.2 ... Assoziationen zwischen Objekten ... 258
6.3 ... Privatsphäre und Sichtbarkeit ... 259
6.3.1 ... Wieso nicht freie Methoden und Variablen für alle? 260
6.3.2 ... Privat ist nicht ganz privat. Es kommt darauf an, wer’s sieht ... 261
6.3.3 ... Zugriffsmethoden für Attribute definieren ... 263
6.3.4 ... Zusammenfassung zur Sichtbarkeit ... 265
6.3.5 ... Sichtbarkeit in der UML ... 265
6.4 ... Statische Methoden und Variablen ... 266
6.4.1 ... Warum statische Eigenschaften sinnvoll sind ... 266
6.4.2 ... Statische Eigenschaften mit static ... 267
6.4.3 ... Statische Eigenschaften als Objekteigenschaften nutzen ... 268
6.4.4 ... Statische Eigenschaften und Objekteigenschaften ... 268
6.4.5 ... Statische Variablen zum Datenaustausch ... 269
6.4.6 ... Warum die Groß- und Kleinschreibung wichtig ist ... 270
6.4.7 ... Konstanten mit dem Schlüsselwort final bei Variablen ... 270
6.4.8 ... Typsicherere Konstanten ... 271
6.4.9 ... Statische Blöcke ... 272
6.5 ... Objekte anlegen und zerstören ... 273
6.5.1 ... Konstruktoren schreiben ... 273
6.5.2 ... Einen anderen Konstruktor der gleichen Klasse aufrufen ... 276
6.5.3 ... Initialisierung der Objekt- und Klassenvariablen ... 278
6.5.4 ... Finale Werte im Konstruktor setzen ... 280
6.5.5 ... Exemplarinitialisierer (Instanzinitialisierer) 281
6.5.6 ... Zerstörung eines Objekts durch den Müllaufsammler ... 281
6.5.7 ... Implizit erzeugte String- Objekte ... 283
6.5.8 ... Zusammenfassung: Konstruktoren und Methoden ... 283
6.6 ... Veraltete (deprecated) Methoden/Konstruktoren ... 284
6.7 ... Vererbung ... 286
6.7.1 ... Vererbung in Java ... 286
6.7.2 ... Einfach- und Mehrfachvererbung ... 286
6.7.3 ... Kleidungsstücke modelliert ... 286
6.7.4 ... Sichtbarkeit ... 289
6.7.5 ... Das Substitutionsprinzip ... 289
6.7.6 ... Automatische und explizite Typanpassung ... 289
6.7.7 ... Finale Klassen ... 291
6.7.8 ... Unterklassen prüfen mit dem Operator instanceof ... 291
6.8 ... Methoden überschreiben ... 291
6.8.1 ... super: Aufrufen einer Methode aus der Oberklasse ... 292
6.8.2 ... Nicht überschreibbare Funktionen ... 295
6.8.3 ... Fehlende kovariante Rückgabewerte ... 295
6.9 ... Die oberste aller Klassen: Object ... 296
6.9.1 ... Klassenobjekte ... 296
6.9.2 ... Hashcodes ... 297
6.9.3 ... Objektidentifikation mit toString() 297
6.9.4 ... Objektgleichheit mit equals() und Identität ... 297
6.9.5 ... Klonen eines Objekts mit clone () 300
6.9.6 ... Aufräumen mit finalize() 300
6.9.7 ... Synchronisation ... 301
6.10 ... Die Oberklasse gibt Funktionalität vor ... 301
6.10.1 ... Dynamisches Binden als Beispiel für Polymorphie ... 302
6.10.2 ... Keine Polymorphie bei privaten, statischen und finalen Methoden ... 304
6.10.3 ... Konstruktoren in der Vererbung ... 305
6.11 ... Abstrakte Klassen ... 309
6.11.1 ... Abstrakte Klassen ... 309
6.11.2 ... Abstrakte Methoden ... 310
6.11.3 ... Über abstract final ... 314
6.12 ... Schnittstellen ... 314
6.12.1 ... Die Mehrfachvererbung bei Schnittstellen ... 318
6.12.2 ... Erweitern von Interfaces – Subinterfaces ... 319
6.12.3 ... Vererbte Konstanten bei Schnittstellen ... 319
6.12.4 ... Vordefinierte Methoden einer Schnittstelle ... 321
6.12.5 ... CharSequence als Beispiel einer Schnittstelle ... 322
6.13 ... Innere Klassen ... 324
6.13.1 ... Geschachtelte Top-Level- Klassen und Schnittstellen ... 325
6.13.2 ... Mitglieds- oder Elementklassen ... 325
6.13.3 ... Lokale Klassen ... 328
6.13.4 ... Anonyme innere Klassen ... 329
6.13.5 ... Eine Sich-Selbst- Implementierung ... 332
6.13.6 ... this und Vererbung ... 334
6.13.7 ... Implementierung einer verketteten Liste ... 335
6.13.8 ... Funktionszeiger ... 337
6.14 ... Gegenseitige Abhängigkeiten von Klassen ... 338
6.15 ... Pakete ... 339
7 ... Exceptions ... 341
7.1 ... Problembereiche einzäunen ... 343
7.1.1 ... Exceptions in Java mit try und catch ... 343
7.1.2 ... Eine Datei auslesen mit RandomAccessFile ... 344
7.1.3 ... Ablauf einer Ausnahmesituation ... 345
7.1.4 ... Wiederholung kritischer Bereiche ... 345
7.1.5 ... throws im Methodenkopf angeben ... 346
7.1.6 ... Abschließende Arbeiten mit finally ... 347
7.1.7 ... Nicht erreichbare catch- Klauseln ... 349
7.2 ... Die Klassenhierarchie der Fehler ... 350
7.2.1 ... Die Exception-Hierarchie ... 350
7.2.2 ... Oberausnahmen fangen ... 351
7.2.3 ... Alles geht als Exception durch ... 352
7.2.4 ... Ausnahmen, die nicht gefangen werden müssen: RuntimeException ... 353
7.3 ... Werfen eigener Exceptions ... 354
7.3.1 ... Typecast auf ein null-Objekt für eine NullPointerException ... 355
7.3.2 ... Neue Exception-Klassen definieren ... 355
7.4 ... Rückgabewerte bei ausgelösten Ausnahmen ... 357
7.5 ... Stack-Aufruf analysieren ... 358
7.6 ... Assertions ... 360
7.6.1 ... Assertions in eigenen Programmen nutzen ... 360
7.6.2 ... Assertions aktivieren ... 360
7.6.3 ... Assertion-Nutzung in den Sun- Quellen ... 361
7.7 ... Sicherheitsfragen mit dem SecurityManager klären ... 361
7.7.1 ... Programm beenden ... 361
8 ... Die Funktionsbibliothek ... 363
8.1 ... Die Java- Klassenphilosophie ... 365
8.1.1 ... Übersicht über die Pakete der Standardbibliothek ... 365
8.2 ... Wrapper-Klassen ... 370
8.2.1 ... Die Character-Klasse ... 372
8.2.2 ... Die Boolean-Klasse ... 373
8.2.3 ... Die Basisklasse Number für numerische Wrapper-Objekte ... 375
8.2.4 ... Die Klasse Integer ... 376
8.2.5 ... Behandlung von Überlauf ... 379
8.2.6 ... Unterschiedliche Ausgabeformate ... 380
8.2.7 ... Boxing und Unboxing ... 381
8.3 ... Ausführung von externen Programmen ... 381
8.3.1 ... DOS-Programme aufrufen ... 383
8.3.2 ... Die Windows-Registry verwenden ... 384
8.3.3 ... Einen HTML-Browser unter Windows aufrufen ... 385
8.4 ... Klassenlader (Class Loader) 386
8.4.1 ... Wie heißt die Klasse mit der Methode main()? 386
8.4.2 ... Zeitmessung und Profiling ... 387
8.5 ... Compilieren von Klassen ... 388
8.5.1 ... Der Sun-Compiler ... 388
9 ... Threads und nebenläufige Programmierung ... 391
9.1 ... Prozesse und Threads ... 393
9.1.1 ... Wie parallele Programme die Geschwindigkeit steigern können ... 394
9.2 ... Threads erzeugen ... 396
9.2.1 ... Threads über die Schnittstelle Runnable implementieren ... 396
9.2.2 ... Threads über Runnable starten ... 397
9.2.3 ... Die Klasse Thread erweitern ... 398
9.2.4 ... Erweitern von Thread oder Implementieren von Runnable? 401
9.3 ... Threads schlafen ... 401
9.3.1 ... Eine Zeituhr ... 402
9.4 ... Die Klassen Timer und TimerTask ... 404
9.5 ... Die Zustände eines Threads ... 405
9.5.1 ... Das Ende eines Threads ... 405
9.5.2 ... Einen Thread höflich mit Interrupt beenden ... 406
9.5.3 ... Der stop() von außen ... 408
9.5.4 ... Das ThreadDeath-Objekt ... 408
9.5.5 ... Auf das Ende warten mit join() 409
9.6 ... Arbeit niederlegen und wieder aufnehmen ... 411
9.7 ... Priorität ... 412
9.7.1 ... Threads hoher Priorität und das AWT ... 412
9.7.2 ... Granularität und Vorrang ... 412
9.8 ... Dämonen ... 413
9.9 ... Kooperative und nichtkooperative Threads ... 414
9.10 ... Synchronisation über kritische Abschnitte ... 415
9.10.1 ... Gemeinsam genutzte Daten ... 415
9.10.2 ... Probleme beim gemeinsamen Zugriff und kritische Abschnitte ... 416
9.10.3 ... Punkte parallel initialisieren ... 416
9.10.4 ... i++ sieht atomar aus, ist es aber nicht ... 417
9.10.5 ... Abschnitte mit synchronized schützen ... 418
9.10.6 ... Monitore ... 419
9.10.7 ... Synchronized-Methode am Beispiel der Klasse StringBuffer ... 420
9.10.8 ... Synchronisierte Blöcke ... 420
9.10.9 ... Vor- und Nachteile von synchronisierten Blöcken und Methoden ... 421
9.10.10 ... Nachträglich synchronisieren ... 422
9.10.11 ... Monitore sind reentrant, gut für die Geschwindigkeit ... 422
9.10.12 ... Deadlocks ... 423
9.10.13 ... Erkennen von Deadlocks ... 425
9.11 ... Variablen mit volatile kennzeichnen ... 425
9.12 ... Synchronisation über Warten und Benachrichtigen ... 427
9.12.1 ... Falls der Lock fehlt: IllegalMonitorStateException ... 428
9.12.2 ... Warten mit wait() und Aufwecken mit notify() 429
9.12.3 ... Mehrere Wartende und notifyAll() 430
9.12.4 ... wait() mit einer Zeitspanne ... 430
9.12.5 ... Beispiel Erzeuger- Verbraucher-Programm ... 431
9.12.6 ... Semaphoren ... 434
9.12.7 ... Die Concurrency Utilities von Doug Lea ... 435
9.13 ... Aktive Threads in der Umgebung ... 436
9.14 ... Gruppen von Threads in einer Thread-Gruppe ... 436
9.14.1 ... Etwas über die aktuelle Thread-Gruppe herausfinden ... 436
9.14.2 ... Threads in einer Thread- Gruppe anlegen ... 439
9.14.3 ... Methoden von Thread und ThreadGroup im Vergleich ... 442
9.15 ... Einen Abbruch der virtuellen Maschine erkennen ... 443
10 ... Raum und Zeit ... 445
10.1 ... Greenwich Mean Time (GMT) 447
10.2 ... Wichtige Datum-Klassen im Überblick ... 448
10.3 ... Zeitzonen und Sprachen der Länder ... 448
10.3.1 ... Zeitzonen durch die Klasse TimeZone repräsentieren ... 450
10.4 ... Sprachen der Länder ... 451
10.4.1 ... Sprachen in Java über Locale- Objekte ... 452
10.5 ... Einfache Übersetzung durch ResourceBundle-Objekte ... 455
10.6 ... Die Klasse Date ... 457
10.6.1 ... Objekte erzeugen und Methoden nutzen ... 457
10.7 ... Calendar und GregorianCalendar ... 458
10.7.1 ... Die abstrakte Klasse Calendar ... 458
10.7.2 ... Der gregorianische Kalender ... 460
10.8 ... Formatieren der Datumsangaben ... 466
10.8.1 ... Mit DateFormat und SimpleDateFormat formatieren ... 466
10.8.2 ... Parsen von Datumswerten ... 473
10.8.3 ... Parsen und Formatieren ab bestimmten Positionen ... 475
11 ... Datenstrukturen und Algorithmen ... 477
11.1 ... Mit einem Iterator durch die Daten wandern ... 479
11.1.1 ... Die Schnittstellen Enumeration und Iterator ... 479
11.1.2 ... Arrays mit Iteratoren durchlaufen ... 481
11.2 ... Datenstrukturen und die Collection-API ... 483
11.2.1 ... Die Schnittstelle Collection ... 483
11.2.2 ... Das erste Programm mit Container-Klassen ... 484
11.2.3 ... Schnittstellen, die Collection erweitern, und Map ... 486
11.2.4 ... Konkrete Container- Klassen ... 487
11.3 ... Listen ... 488
11.3.1 ... AbstractList ... 488
11.3.2 ... Beispiel mit List- Methoden ... 490
11.3.3 ... ArrayList ... 493
11.3.4 ... asList() und die »echten« Listen ... 495
11.3.5 ... toArray() von Collection verstehen – die Gefahr einer Falle erkennen ... 496
11.3.6 ... Die interne Arbeitsweise von ArrayList und Vector ... 498
11.3.7 ... LinkedList ... 500
11.3.8 ... Queue, die Schlange ... 500
11.4 ... Stack (Kellerspeicher, Stapel) 501
11.4.1 ... Die Methoden von Stack ... 501
11.4.2 ... Ein Stack ist ein Vector – aha! 502
11.5 ... Die Klasse HashMap und assoziative Speicher ... 503
11.5.1 ... Ein Objekt der Klasse HashMap erzeugen ... 503
11.5.2 ... Einfügen und Abfragen der Datenstruktur ... 503
11.5.3 ... Wichtige Eigenschaften von Assoziativspeichern ... 507
11.5.4 ... Elemente im Assoziativspeicher müssen unveränderbar bleiben ... 507
11.5.5 ... Die Arbeitsweise einer Hash- Tabelle ... 507
11.5.6 ... Aufzählen der Elemente ... 509
11.5.7 ... Der Gleichheitstest und der Hash-Wert einer Hash-Tabelle ... 510
11.5.8 ... Klonen ... 510
11.6 ... Die abstrakte Klasse Dictionary ... 511
11.7 ... Die Properties-Klasse ... 511
11.7.1 ... Über die Klasse Properties ... 512
11.7.2 ... put(), get() und getProperties() 514
11.7.3 ... Eigenschaften ausgeben ... 514
11.7.4 ... Systemeigenschaften der Java- Umgebung ... 515
11.7.5 ... Browser-Version abfragen ... 516
11.7.6 ... Properties von der Konsole aus setzen ... 516
11.7.7 ... Windows-typische INI- Dateien ... 517
11.8 ... Algorithmen ... 518
11.8.1 ... Datenmanipulation ... 519
11.8.2 ... Vergleichen von Objekten mit Comparator und Comparable ... 520
11.8.3 ... Größten und kleinsten Wert einer Collection finden ... 522
11.8.4 ... Sortieren ... 523
11.8.5 ... Elemente in der Collection suchen ... 525
11.9 ... Synchronisation der Datenstrukturen ... 526
11.10 ... Typsichere Datenstrukturen ... 527
11.11 ... Die abstrakten Basisklassen für Container ... 529
11.11.1 ... Optionale Methoden ... 530
11.12 ... Die Klasse BitSet für Bitmengen ... 530
11.12.1 ... Ein BitSet anlegen und füllen ... 530
11.12.2 ... Mengenorientierte Operationen ... 531
11.12.3 ... Funktionsübersicht ... 532
11.12.4 ... Primzahlen in einem BitSet verwalten ... 533
11.13 ... Ein Design-Pattern durch Beobachten von Änderungen ... 534
11.13.1 ... Design-Pattern ... 534
11.13.2 ... Das Beobachter-Pattern (Observer/Observable) 535
12 ... Datenströme und Dateien ... 539
12.1 ... Datei und Verzeichnis ... 541
12.1.1 ... Dateien und Verzeichnisse mit der Klasse File ... 542
12.1.2 ... Dateieigenschaften und - attribute ... 543
12.1.3 ... Sicherheitsprüfung ... 546
12.1.4 ... Umbenennen und Verzeichnisse anlegen ... 546
12.1.5 ... Die Wurzel aller Verzeichnisse ... 546
12.1.6 ... Verzeichnisse listen und Dateien filtern ... 547
12.1.7 ... Dateien und Verzeichnisse löschen ... 550
12.1.8 ... Implementierungsmöglichkeiten für die Klasse File ... 551
12.1.9 ... Verzeichnisse nach Dateien rekursiv durchsuchen ... 553
12.2 ... Dateien mit wahlfreiem Zugriff ... 555
12.2.1 ... Ein RandomAccessFile öffnen ... 555
12.2.2 ... Aus dem RandomAccessFile lesen ... 556
12.2.3 ... Schreiben ... 557
12.2.4 ... Die Länge des RandomAccessFile ... 557
12.2.5 ... Hin und her in der Datei ... 558
12.3 ... Übersicht über wichtige Stream- und WriterReader ... 559
12.3.1 ... Die abstrakten Basisklassen ... 559
12.3.2 ... Übersicht über Ein- /Ausgabeklassen ... 560
12.4 ... Eingabe- und Ausgabe-Klassen: InputStream und OutputStream ... 561
12.4.1 ... Die Klasse OutputStream ... 561
12.4.2 ... Ein Datenschlucker ... 563
12.4.3 ... Anwendung der Klasse FileOutputStream ... 563
12.4.4 ... Die Eingabeklasse InputStream ... 564
12.4.5 ... Anwenden der Klasse FileInputStream ... 566
12.4.6 ... Kopieren von Dateien ... 568
12.4.7 ... Daten filtern durch FilterInputStream und FilterOutputStream ... 569
12.4.8 ... Der besondere Filter PrintStream ... 570
12.4.9 ... System.in und System.out ... 572
12.4.10 ... Bytes in den Strom schreiben mit ByteArrayOutputStream ... 576
12.4.11 ... Ströme zusammensetzen mit SequenceInputStream ... 577
12.5 ... Ressourcen wie Grafiken aus dem Klassenpfad und aus Jar-Archiven laden ... 579
12.6 ... Die Unterklassen von Writer ... 580
12.6.1 ... Die abstrakte Klasse Writer ... 580
12.6.2 ... Datenkonvertierung durch den OutputStreamWriter ... 582
12.6.3 ... In Dateien schreiben mit der Klasse FileWriter ... 583
12.6.4 ... StringWriter und CharArrayWriter ... 585
12.6.5 ... Writer als Filter verketten ... 587
12.6.6 ... Gepufferte Ausgabe durch BufferedWriter ... 588
12.6.7 ... Ausgabemöglichkeiten durch PrintWriter erweitern ... 590
12.6.8 ... Daten mit FilterWriter filtern ... 592
12.7 ... Die Klassen um Reader ... 597
12.7.1 ... Die abstrakte Basisklasse Reader ... 598
12.7.2 ... Automatische Konvertierungen mit dem InputStreamReader ... 600
12.7.3 ... Dateien lesen mit der Klasse FileReader ... 601
12.7.4 ... StringReader und CharArrayReader ... 602
12.8 ... Schachteln von Eingabe- Streams ... 604
12.8.1 ... Gepufferte Eingaben mit der Klasse BufferedReader ... 604
12.8.2 ... LineNumberReader zählt automatisch Zeilen mit ... 605
12.8.3 ... Eingaben filtern mit der Klasse FilterReader ... 607
12.8.4 ... Daten zurücklegen mit der Klasse PushbackReader ... 609
12.9 ... Kommunikation zwischen Threads mit Pipes ... 612
12.9.1 ... PipedOutputStream und PipedInputStream ... 613
12.9.2 ... PipedWriter und PipedReader ... 615
12.10 ... Datenkompression ... 616
12.10.1 ... Die Java-Unterstützung beim Komprimieren und Zusammenpacken ... 617
12.10.2 ... Datenströme komprimieren ... 617
12.10.3 ... Zip-Archive ... 620
12.11 ... Prüfsummen ... 629
12.11.1 ... Die Schnittstelle Checksum ... 629
12.11.2 ... Die Klasse CRC32 630
12.11.3 ... Die Adler32-Klasse ... 632
12.12 ... Zugriff auf SMB-Server ... 633
12.12.1 ... jCIFS ... 633
12.13 ... Persistente Objekte und Serialisierung ... 634
12.13.1 ... Objekte speichern ... 634
12.13.2 ... Objekte lesen ... 637
12.13.3 ... Die Schnittstelle Serializable ... 639
12.13.4 ... Nicht serialisierbare Attribute mit transient aussparen ... 639
12.13.5 ... Das Abspeichern selbst in die Hand nehmen ... 641
12.13.6 ... Tiefe Objektkopien ... 643
12.13.7 ... Versionenverwaltung und die SUID ... 644
12.13.8 ... Beispiele aus den Standardklassen ... 647
12.13.9 ... Serialisieren in XML- Dateien ... 648
12.13.10 ... JSX (Java Serialization to XML) 649
12.13.11 ... XML-API von Sun ... 652
12.14 ... Die Logging-API ... 654
13 ... Die eXtensible Markup Language (XML) 657
13.1 ... Auszeichnungssprachen ... 659
13.1.1 ... Die Standard Generalized Markup Language (SGML) 659
13.1.2 ... Extensible Markup Language (XML) 660
13.2 ... Eigenschaften von XML- Dokumenten ... 660
13.2.1 ... Elemente und Attribute ... 660
13.2.2 ... Beschreibungssprache für den Aufbau von XML-Dokumenten ... 662
13.2.3 ... Schema – eine Alternative zu DTD ... 665
13.2.4 ... Namensraum (Namespace) 668
13.2.5 ... XML-Applikationen ... 669
13.3 ... Die Java-APIs für XML ... 669
13.3.1 ... Das Document Object Model (DOM) 670
13.3.2 ... Simple API for XML Parsing (SAX) 670
13.3.3 ... Java Document Object Model (JDOM) 670
13.4 ... XML-Dateien mit JDOM verarbeiten ... 670
13.4.1 ... JDOM beziehen ... 671
13.4.2 ... Paketübersicht ... 671
13.4.3 ... Die Document-Klasse ... 673
13.4.4 ... Eingaben aus der Datei lesen ... 673
13.4.5 ... Das Dokument als XML-Datei ausgeben ... 674
13.4.6 ... Der Dokumenttyp ... 674
13.4.7 ... Elemente ... 675
13.4.8 ... Zugriff auf Elementinhalte ... 677
13.4.9 ... Liste mit Unterelementen erzeugen ... 679
13.4.10 ... Neue Elemente einfügen und ändern ... 680
13.4.11 ... Attributinhalte lesen und ändern ... 682
13.5 ... JAXP als Java-Schnittstelle zu XML ... 685
13.5.1 ... Einführung in XSLT ... 686
13.5.2 ... Umwandlung von XML-Dateien mit JDOM und JAXP ... 689
13.6 ... Serielle Verarbeitung von XML mit SAX ... 689
13.6.1 ... Ausgabe der Datei party.xml mit SAX ... 690
14 ... Grafikprogrammierung mit dem AWT ... 693
14.1 ... Das Abstract-Window- Toolkit ... 695
14.1.1 ... Java Foundation Classes ... 695
14.2 ... Fenster unter grafischen Oberflächen ... 696
14.2.1 ... Fenster öffnen ... 696
14.2.2 ... Größe und Position des Fensters verändern ... 699
14.2.3 ... Fenster- und Dialog- Dekoration ... 700
14.3 ... Das Toolkit ... 700
14.3.1 ... Einen Hinweis beepen ... 700
14.4 ... Grundlegendes zum Zeichnen ... 701
14.4.1 ... Die paint()-Methode ... 701
14.4.2 ... Auffordern zum Neuzeichnen mit repaint() 703
14.4.3 ... Fensterinhalte ändern und die ereignisorientierte Programmierung ... 703
14.5 ... Punkte, Linien und Rechtecke aller Art ... 707
14.5.1 ... Linien ... 707
14.5.2 ... Rechtecke ... 708
14.6 ... Alles was rund ist ... 709
14.7 ... Polygone und Polylines ... 710
14.7.1 ... Die Polygon-Klasse ... 711
14.7.2 ... N-Ecke zeichnen ... 712
14.7.3 ... Vollschlanke Linien zeichnen ... 714
14.8 ... Zeichenketten schreiben ... 715
14.8.1 ... Einen neuen Zeichensatz bestimmen ... 716
14.8.2 ... Zeichensätze des Systems ermitteln ... 718
14.8.3 ... Die Klasse FontMetrics ... 719
14.8.4 ... True Type Fonts ... 722
14.9 ... Clipping-Operationen ... 724
14.10 ... Farben ... 727
14.10.1 ... Zufällige Farbblöcke zeichnen ... 728
14.10.2 ... Farbanteile zurückgeben ... 729
14.10.3 ... Vordefinierte Farben ... 730
14.10.4 ... Farben aus Hexadezimalzahlen erzeugen ... 731
14.10.5 ... Einen helleren oder dunkleren Farbton wählen ... 732
14.10.6 ... Farbmodelle HSB und RGB ... 733
14.10.7 ... Die Farben des Systems ... 734
14.11 ... Bilder anzeigen und Grafiken verwalten ... 739
14.11.1 ... Eine Grafik zeichnen ... 741
14.11.2 ... Grafiken zentrieren ... 743
14.11.3 ... Laden von Bildern mit dem MediaTracker beobachten ... 743
14.11.4 ... Kein Flackern durch Double- Buffering ... 748
14.11.5 ... Bilder skalieren ... 750
14.12 ... Programm-Icon setzen ... 752
14.12.1 ... VolatileImage ... 753
14.13 ... Grafiken speichern ... 753
14.13.1 ... Bilder im GIF-Format speichern ... 753
14.13.2 ... Gif speichern mit dem ACME- Paket ... 755
14.13.3 ... JPEG-Dateien mit dem Sun- Paket schreiben ... 756
14.13.4 ... Java Image Management Interface (JIMI) 758
14.14 ... Von Produzenten, Konsumenten und Beobachtern ... 760
14.14.1 ... Producer und Consumer für Bilder ... 761
14.14.2 ... Beispiel für die Übermittlung von Daten ... 761
14.14.3 ... Bilder selbst erstellen ... 765
14.14.4 ... Die Bildinformationen wieder auslesen ... 768
14.15 ... Filter ... 770
14.15.1 ... Grundlegende Eigenschaft von Filtern ... 770
14.15.2 ... Konkrete Filterklassen ... 771
14.15.3 ... Mit CropImageFilter Teile ausschneiden ... 773
14.15.4 ... Transparenz ... 773
14.16 ... Alles wird bunt mit Farbmodellen ... 774
14.16.1 ... Die abstrakte Klasse ColorModel ... 775
14.16.2 ... Farbwerte im Pixel mit der Klasse DirectColorModel ... 777
14.16.3 ... Die Klasse IndexColorModel ... 778
14.17 ... Drucken ... 782
14.17.1 ... Drucken mit dem einfachen Ansatz ... 782
14.17.2 ... Ein PrintJob ... 783
14.17.3 ... Drucken der Inhalte ... 785
14.17.4 ... Komponenten drucken ... 785
14.17.5 ... Den Drucker am Parallelport ansprechen ... 786
14.18 ... Java 2D-API ... 786
14.18.1 ... Grafische Objekte zeichnen ... 787
14.18.2 ... Geometrische Objekte durch Shape gekennzeichnet ... 788
14.18.3 ... Eigenschaften geometrischer Objekte ... 790
14.18.4 ... Transformationen mit einem AffineTransform-Objekt ... 798
14.19 ... Graphic Layers Framework ... 798
14.20 ... Grafikverarbeitung ohne grafische Oberfläche ... 800
14.20.1 ... Xvfb-Server ... 800
14.20.2 ... Pure Java AWT Toolkit (PJA) 800
15 ... Komponenten, Container und Ereignisse ... 803
15.1 ... Es tut sich was – Ereignisse beim AWT ... 805
15.1.1 ... Was ist ein Ereignis? 805
15.1.2 ... Die Klasse AWTEvent ... 805
15.1.3 ... Events auf verschiedenen Ebenen ... 805
15.1.4 ... Ereignisquellen, -senken und Horcher (Listener) 808
15.1.5 ... Listener implementieren ... 808
15.1.6 ... Listener bei Ereignisauslöser anmelden ... 809
15.2 ... Varianten, das Fenster zu schließen ... 810
15.2.1 ... Eine Klasse implementiert die Schnittstelle WindowListener ... 810
15.2.2 ... Adapterklassen nutzen ... 812
15.2.3 ... Innere Mitgliedsklassen und innere anonyme Klassen ... 814
15.2.4 ... Generic Listener ... 815
15.3 ... Komponenten im AWT und in Swing ... 815
15.3.1 ... Peer-Klassen und Lightweight- Komponenten ... 816
15.3.2 ... Die Basis aller Komponenten: Component und JComponent ... 817
15.3.3 ... Proportionales Vergrößern eines Fensters ... 818
15.3.4 ... Dynamisches Layout während einer Größenänderung ... 820
15.3.5 ... Hinzufügen von Komponenten ... 820
15.4 ... Das Swing-Fenster JFrame ... 821
15.4.1 ... Kinder auf einem Swing- Fenster ... 821
15.4.2 ... Schließen eines Swing- Fensters ... 822
15.5 ... Ein Informationstext über die Klasse JLabel ... 823
15.5.1 ... Mehrzeiliger Text ... 825
15.6 ... Die Klasse ImageIcon ... 826
15.6.1 ... Die Schnittstelle Icon ... 828
15.6.2 ... Was Icon und Image verbindet ... 829
15.7 ... Eine Schaltfläche (JButton) 830
15.7.1 ... Der aufmerksame ActionListener ... 832
15.7.2 ... Generic Listener für Schaltflächen-Ereignisse verwenden ... 834
15.7.3 ... AbstractButton ... 836
15.7.4 ... JToggleButton ... 838
15.8 ... Tooltips ... 838
15.9 ... Horizontale und vertikale Schieberegler ... 839
15.9.1 ... Der AdjustmentListener, der auf Änderungen hört ... 842
15.10 ... JSlider ... 844
15.11 ... Ein Auswahlmenü – Choice, JComboBox ... 845
15.11.1 ... ItemListener ... 848
15.11.2 ... Zuordnung einer Taste mit einem Eintrag ... 849
15.12 ... Eines aus vielen – Kontrollfelder (JCheckBox) 850
15.12.1 ... Ereignisse über ItemListener ... 852
15.13 ... Kontrollfeldgruppen, Optionsfelder und JRadioButton ... 852
15.14 ... Der Fortschrittsbalken JProgressBar ... 855
15.15 ... Rahmen (Borders) 856
15.16 ... Symbolleisten alias Toolbars ... 858
15.17 ... Menüs ... 860
15.17.1 ... Die Menüleisten und die Einträge ... 860
15.17.2 ... Menüeinträge definieren ... 862
15.17.3 ... Mnemonics und Shortcuts (Accelerator) 863
15.17.4 ... Beispiel für ein Programm mit Menüleisten ... 865
15.18 ... Popup-Menüs ... 869
15.19 ... Alles Auslegungssache: die Layoutmanager ... 872
15.19.1 ... Null-Layout ... 873
15.19.2 ... FlowLayout ... 874
15.19.3 ... BorderLayout ... 876
15.19.4 ... GridLayout ... 878
15.19.5 ... Der GridBagLayout- Manager ... 880
15.19.6 ... Weitere Layoutmanager ... 885
15.20 ... Der Inhalt einer Zeichenfläche: JPanel ... 885
15.21 ... Das Konzept des Model-View- Controllers ... 886
15.22 ... List-Boxen ... 888
15.23 ... JSpinner ... 890
15.24 ... Texteingabefelder ... 892
15.24.1 ... Text in einer Eingabezeile ... 892
15.24.2 ... Die Oberklasse der JText- Komponenten: JTextComponent ... 893
15.24.3 ... JPasswordField ... 894
15.24.4 ... Validierende Eingabefelder ... 895
15.24.5 ... Mehrzeilige Textfelder ... 896
15.24.6 ... Die Editor-Klasse JEditorPane ... 898
15.25 ... Bäume mit JTree-Objekten ... 901
15.25.1 ... Selektionen bemerken ... 902
15.26 ... Tabellen mit JTable ... 903
15.26.1 ... Ein eigenes Modell ... 905
15.26.2 ... AbstractTableModel ... 905
15.26.3 ... DefaultTableModel ... 908
15.26.4 ... Ein eigener Renderer für Tabellen ... 909
15.26.5 ... Spalteninformationen ... 913
15.26.6 ... Tabellenkopf von Swing- Tabellen ... 913
15.26.7 ... Selektionen einer Tabelle ... 914
15.27 ... JRootPane und JLayeredPane ... 915
15.28 ... Dialoge ... 915
15.28.1 ... Der Farbauswahldialog JColorChooser ... 917
15.28.2 ... Der Dateiauswahldialog ... 918
15.29 ... Das Java-Look&Feel ... 921
15.30 ... Swing-Beschriftungen einer anderen Sprache geben ... 923
15.31 ... Die Zwischenablage (Clipboard) 924
15.32 ... Undo durchführen ... 927
15.33 ... Ereignisverarbeitung auf unterster Ebene ... 929
15.34 ... AWT, Swing und die Threads ... 930
15.34.1 ... Warum Swing nicht Thread- sicher ist ... 931
15.34.2 ... Swing-Elemente bedienen mit invokeLater() und invokeAndWait() 933
15.35 ... Selbst definierte Cursor ... 935
15.35.1 ... Flackern des Mauszeigers bei Animationen vermeiden ... 936
15.36 ... Mausrad-Unterstützung ... 937
15.37 ... Benutzerinteraktionen automatisieren ... 937
15.37.1 ... Automatisch in die Tasten hauen ... 938
15.37.2 ... Mausoperationen ... 939
15.37.3 ... Methoden zur Zeitsteuerung ... 939
15.37.4 ... Screenshots ... 940
15.37.5 ... Funktionsweise und Beschränkungen ... 940
16 ... Netzwerkprogrammierung ... 941
16.1 ... Grundlegende Begriffe ... 943
16.1.1 ... Internet-Standards und RFC ... 943
16.2 ... URL-Verbindungen und URL- Objekte ... 944
16.2.1 ... Die Klasse URL ... 945
16.2.2 ... Informationen über eine URL ... 948
16.2.3 ... Der Zugriff auf die Daten über die Klasse URL ... 950
16.3 ... Die Klasse URLConnection ... 952
16.3.1 ... Methoden und Anwendung von URLConnection ... 952
16.3.2 ... Protokoll- und Content- Handler ... 953
16.3.3 ... Im Detail: vom URL zu URLConnection ... 956
16.3.4 ... Autorisierte URL- Verbindungen mit Basic Authentication ... 957
16.3.5 ... Apache Jakarta HttpClient ... 958
16.4 ... Das Common Gateway Interface ... 959
16.4.1 ... Parameter für ein CGI- Programm ... 959
16.4.2 ... Kodieren der Parameter für CGI-Programme ... 960
16.4.3 ... Eine Suchmaschine ansprechen ... 962
16.5 ... Host- und IP-Adressen ... 963
16.5.1 ... Das Netz ist Klasse … 964
16.5.2 ... IP-Adresse des lokalen Hosts ... 965
16.5.3 ... Die Methode getAllByName() 966
16.6 ... NetworkInterface ... 966
16.7 ... IPv6 für Java mit Jipsy ... 968
16.8 ... Socket-Programmierung ... 968
16.8.1 ... Das Netzwerk ist der Computer ... 968
16.8.2 ... Standarddienste unter Windows nachinstallieren ... 970
16.8.3 ... Stream-Sockets ... 971
16.8.4 ... Informationen über den Socket ... 973
16.8.5 ... Mit telnet an den Ports horchen ... 974
16.8.6 ... Ein kleines Echo – lebt der Rechner noch? 974
16.9 ... Client/Server- Kommunikation ... 975
16.9.1 ... Warten auf Verbindungen ... 976
16.9.2 ... Ein Multiplikations- Server ... 977
16.10 ... SLL-Verbindungen mit JSSE ... 979
16.11 ... Web-Protokolle mit NetComponents nutzen ... 980
16.12 ... E-Mail ... 980
16.12.1 ... Wie eine E-Mail um die Welt geht ... 980
16.12.2 ... Übertragungsprotokolle ... 981
16.12.3 ... Das Simple Mail Transfer Protocol ... 983
16.12.4 ... E-Mails versenden mit Suns JavaMail-API ... 984
16.12.5 ... E-Mails mittels POP3 abrufen ... 985
16.13 ... Arbeitsweise eines Web- Servers ... 987
16.13.1 ... Das Hypertext Transfer Protocol (HTTP) 987
16.13.2 ... Anfragen an den Server ... 987
16.13.3 ... Die Antworten vom Server ... 990
16.14 ... Datagram-Sockets ... 994
16.14.1 ... Die Klasse DatagramSocket ... 995
16.14.2 ... Datagramme und die Klasse DatagramPacket ... 997
16.14.3 ... Auf ein hereinkommendes Paket warten ... 998
16.14.4 ... Ein Paket zum Senden vorbereiten ... 999
16.14.5 ... Methoden der Klasse DatagramPacket ... 1000
16.14.6 ... Das Paket senden ... 1000
16.14.7 ... Die Zeitdienste und ein eigener Server und Client ... 1001
16.15 ... Internet Control Message Protocol (ICMP) 1004
16.15.1 ... Ping ... 1004
16.16 ... Multicast-Kommunikation ... 1006
17 ... Servlets und Java Server Pages ... 1007
17.1 ... Dynamische Web-Seiten und Servlets ... 1009
17.1.1 ... Was sind Servlets? 1009
17.1.2 ... Was sind Java Server Pages? 1010
17.1.3 ... Vorteil von JSP/Servlets gegenüber CGI-Programmen ... 1011
17.2 ... Vom Client zum Server und wieder zurück ... 1012
17.2.1 ... Der bittende Client ... 1012
17.2.2 ... Was erzeugt ein Web-Server für eine Antwort? 1013
17.2.3 ... Wer oder was ist MIME? 1014
17.3 ... Servlets und Java Server Pages entwickeln und testen ... 1015
17.3.1 ... Servlet-Container ... 1015
17.3.2 ... Web-Server mit Servlet- Funktionalität ... 1016
17.3.3 ... Tomcat ... 1018
17.4 ... Java Server Pages ... 1019
17.4.1 ... JSP mit Tomcat nutzen ... 1019
17.5 ... Skript-Elemente ... 1020
17.5.1 ... Scriptlets ... 1020
17.5.2 ... Ausdrücke ... 1020
17.5.3 ... Deklarationen ... 1021
17.5.4 ... Kommentare und Quoting ... 1021
17.6 ... Web-Applikationen ... 1022
17.7 ... Implizite Objekte ... 1023
17.8 ... Entsprechende XML-Tags ... 1024
17.9 ... Was der Browser mit auf den Weg gibt – HttpServletRequest ... 1025
17.9.1 ... Verarbeiten der Header ... 1025
17.9.2 ... Hilfsfunktion im Umgang mit Headern ... 1026
17.9.3 ... Übersicht der Browser- Header ... 1026
17.10 ... Formulardaten ... 1027
17.11 ... Das HttpServletResponse- Objekt ... 1029
17.11.1 ... Automatisches Neuladen ... 1029
17.11.2 ... Seiten umlenken ... 1030
17.12 ... JSP-Direktiven ... 1031
17.12.1 ... page-Direktiven im Überblick ... 1031
17.12.2 ... include-Direktive ... 1032
17.13 ... Aktionen ... 1033
17.13.1 ... Aktion include ... 1033
17.13.2 ... Aktion forward ... 1034
17.13.3 ... Aktion plugin ... 1034
17.14 ... Beans ... 1035
17.14.1 ... Beans in JSP-Seiten anlegen, Attribute setzen und erfragen ... 1035
17.14.2 ... Der schnelle Zugriff auf Parameter ... 1036
17.15 ... Kleine Kekse: die Klasse Cookies ... 1037
17.15.1 ... Cookies erzeugen und setzen ... 1038
17.15.2 ... Cookies vom Servlet einlesen ... 1038
17.15.3 ... Kleine Helfer für Cookies ... 1039
17.15.4 ... Cookie-Status ändern ... 1040
17.15.5 ... Langlebige Cookies ... 1041
17.15.6 ... Ein Warenkorbsystem ... 1042
17.16 ... Sitzungsverfolgung (Session Tracking) 1043
17.16.1 ... Das mit einer Sitzung verbundene Objekt HttpSession ... 1044
17.16.2 ... Werte mit einer Sitzung assoziieren und auslesen ... 1044
17.16.3 ... URL-Rewriting ... 1045
17.16.4 ... Zusätzliche Informationen ... 1046
17.17 ... Tag-Libraries ... 1048
17.17.1 ... Standard Tag Library (JSTL) der Apache-Gruppe ... 1049
17.17.2 ... Beispiel mit einer Taglib- Direktive ... 1050
17.18 ... Das erste Servlet compilieren und ausführen ... 1051
17.18.1 ... Servlets compilieren ... 1052
17.18.2 ... Wohin mit dem Servlet? 1053
17.19 ... Der Lebenszyklus eines Servlets ... 1053
17.19.1 ... Initialisierung in init() 1054
17.19.2 ... Abfragen bei service() 1056
17.19.3 ... Mehrere Anfragen beim Servlet und die Thread-Sicherheit ... 1057
17.19.4 ... Das Ende eines Servlets ... 1058
17.20 ... Das HttpServletResponse- Objekt ... 1058
17.20.1 ... Wir generieren eine Web- Seite ... 1058
17.20.2 ... Binärdaten senden ... 1059
17.20.3 ... Komprimierte Daten mit Content-Encoding ... 1061
17.20.4 ... Noch mehr über Header, die der Server setzt ... 1062
17.21 ... Objekte und Dateien per POST verschicken ... 1063
17.21.1 ... Datei-Upload ... 1064
17.22 ... Servlets und Sessions ... 1065
17.23 ... Weiterleiten und Einbinden von Servlet-Inhalten ... 1065
17.24 ... Inter-Servlet- Kommunikation ... 1067
17.24.1 ... Daten zwischen Servlets teilen ... 1067
17.25 ... Internationalisierung ... 1067
17.25.1 ... Die Länderkennung des Anfragers auslesen ... 1068
17.25.2 ... Länderkennung für die Ausgabe setzen ... 1068
17.25.3 ... Westeuropäische Texte senden ... 1068
17.26 ... Tomcat: Spezielles ... 1069
17.26.1 ... Tomcat als Service unter Windows NT ausführen ... 1069
17.26.2 ... MIME-Types mit Tomcat verbinden ... 1070
17.26.3 ... Servlets beim Start laden ... 1070
17.27 ... Ein Servlet generiert WAP- Seiten für das Handy ... 1071
17.27.1 ... Ein WAP-Handy simulieren ... 1071
17.27.2 ... Übersicht der wichtigsten Tags ... 1072
17.27.3 ... Der Gateway ... 1073
17.27.4 ... WML-Seiten aufbauen ... 1075
17.27.5 ... Interessante Links zum Thema Servlets/JSP ... 1076
17.28 ... Text in HTML-konformen Text umwandeln ... 1076
18 ... Verteilte Programmierung mit RMI und SOAP ... 1079
18.1 ... Entfernte Methoden ... 1081
18.1.1 ... Wie entfernte Methoden arbeiten ... 1081
18.1.2 ... Stellvertreter (Proxy) 1081
18.1.3 ... RMI ... 1082
18.1.4 ... Wie die Stellvertreter die Daten übertragen ... 1083
18.1.5 ... Probleme mit entfernten Methoden ... 1083
18.2 ... Nutzen von RMI bei Middleware- Lösungen ... 1085
18.3 ... Die Lösung für Java ist RMI ... 1085
18.3.1 ... Entfernte Objekte programmieren ... 1085
18.3.2 ... Entfernte und lokale Objekte im Vergleich ... 1086
18.4 ... Definition einer entfernten Schnittstelle ... 1086
18.5 ... Das entfernte Objekt ... 1087
18.5.1 ... Der Bauplan für entfernte Objekte ... 1088
18.5.2 ... Der Konstruktor ... 1088
18.5.3 ... Implementierung der entfernten Methoden ... 1090
18.6 ... Stellvertreterobjekte erzeugen ... 1090
18.6.1 ... Das Dienstprogramm rmic ... 1090
18.7 ... Der Namensdienst (Registry) 1092
18.7.1 ... Der Port ... 1092
18.8 ... Der Server: entfernte Objekte beim Namensdienst anmelden ... 1092
18.8.1 ... Automatisches Anmelden bei Bedarf ... 1094
18.9 ... Einen Client programmieren ... 1094
18.9.1 ... Einfaches Logging ... 1095
18.10 ... Aufräumen mit dem DGC ... 1095
18.11 ... Entfernte Objekte übergeben und laden ... 1096
18.11.1 ... Klassen vom RMI- Klassenlader nachladen ... 1096
18.11.2 ... Sicherheitsmanager ... 1097
18.12 ... Registry wird vom Server gestartet ... 1098
18.13 ... RMI über die Firewall ... 1099
18.13.1 ... RMI über HTTP getunnelt ... 1099
18.14 ... RMI und CORBA ... 1100
18.15 ... UnicastRemoteObject, RemoteServer und RemoteObject ... 1100
18.16 ... Daily Soap ... 1102
18.16.1 ... SOAP-Implementierung der Apache-Gruppe ... 1103
18.16.2 ... Einen Client mit der Apache- Bibliothek implementieren ... 1103
18.16.3 ... Der Seifen-Server ... 1105
18.17 ... Java-API für XML Messaging (JAXM) 1106
18.18 ... Java Message Service (JMS) 1106
18.18.1 ... OpenJMS ... 1107
18.18.2 ... Beispiel mit Konsument und Produzent im Publish-Subscribe- Modell ... 1108
19 ... Applets, Midlets und Sound ... 1109
19.1 ... Applets und Applikationen – wer darf was? 1111
19.2 ... Das erste Hallo-Applet ... 1111
19.3 ... Die Zyklen eines Applets ... 1113 19.4 ... Parameter an das Applet übergeben ... 1113
19.4.1 ... Wie das Applet den Browser- Inhalt ändern kann ... 1113
19.4.2 ... Den Ursprung des Applets erfragen ... 1114
19.4.3 ... Was ein Applet alles darf ... 1116
19.5 ... Fehler in Applets finden ... 1116
19.6 ... Browserabhängiges Verhalten ... 1116
19.6.1 ... Java im Browser aktiviert? 1116
19.6.2 ... Läuft das Applet unter Netscape oder Microsoft Explorer? 1117
19.6.3 ... Datenaustausch zwischen Applets und Java-Skripten ... 1118
19.7 ... Datenaustausch zwischen Applets ... 1119
19.8 ... Musik in einem Applet und in Applikationen ... 1121
19.8.1 ... Fest verdrahtete Musikdatei in einem Applet ... 1122
19.8.2 ... Variable Musikdatei über einen Parameter ... 1123
19.8.3 ... WAV- und MIDI-Dateien abspielen ... 1123
19.9 ... Webstart ... 1124
19.10 ... Java 2 Micro Edition ... 1124
19.10.1 ... Konfigurationen ... 1125
19.10.2 ... Profile ... 1126
20 ... Datenbankmanagement mit JDBC ... 1129
20.1 ... Das relationale Modell ... 1131
20.2 ... JDBC: der Zugriff auf Datenbanken über Java ... 1132
20.3 ... Die Rolle von SQL ... 1132
20.3.1 ... Ein Rundgang durch SQL- Anfragen ... 1133
20.3.2 ... Datenabfrage mit der Data Query Language (DQL) 1134
20.4 ... Datenbanktreiber für den Zugriff ... 1136
20.4.1 ... Treibertypen ... 1136
20.5 ... Datenbanken und ihre Treiber ... 1137
20.5.1 ... Die freie Datenbank MySQL ... 1138
20.5.2 ... JDBC-Treiber für MySQL: MySQL Connector/J ... 1140
20.5.3 ... Die Datenbank Microsoft Access ... 1140
20.5.4 ... Ein Typ-4-Treiber für den Microsoft SQL Server 2000 1141
20.5.5 ... Die JDBC-ODBC-Bridge ... 1141
20.5.6 ... ODBC einrichten und Access damit verwenden ... 1141
20.5.7 ... Oracle8i Enterprise Edition ... 1143
20.5.8 ... JDBC-Treiber für mobile Endgeräte ... 1143
20.6 ... Eine Beispielabfrage ... 1143
20.7 ... Mit Java an eine Datenbank andocken ... 1145
20.7.1 ... Der Treibermanager ... 1145
20.7.2 ... Eine Aufzählung aller Treiber ... 1145
20.7.3 ... Log-Informationen ... 1146
20.7.4 ... Den Treiber laden ... 1147
20.7.5 ... Verbindung zur Datenbank ... 1148
20.8 ... Datenbankabfragen ... 1151
20.8.1 ... Abfragen über das Statement- Objekt ... 1151
20.8.2 ... Ergebnisse einer Abfrage in ResultSet ... 1152
20.8.3 ... Unicode in der Spalte korrekt auslesen ... 1153
20.8.4 ... wasNull() bei ResultSet ... 1154
20.8.5 ... Wie viele Zeilen hat ein ResultSet? 1154
20.9 ... Java und SQL-Datentypen ... 1154
20.9.1 ... Die getXXX()-Methoden ... 1155
20.10 ... Transaktionen ... 1157
20.11 ... Elemente einer Datenbank hinzufügen und aktualisieren ... 1158
20.11.1 ... Batch-Updates ... 1158
20.12 ... Vorbereitete Anweisungen (Prepared Statements) 1159
20.12.1 ... PreparedStatement-Objekte vorbereiten ... 1160
20.12.2 ... Werte für die Platzhalter eines PreparedStatement ... 1160
20.13 ... Metadaten ... 1162
20.13.1 ... Metadaten über die Tabelle ... 1162
20.13.2 ... Informationen über die Datenbank ... 1166
20.14 ... Die Ausnahmen bei JDBC ... 1167
20.15 ... Java Data Objects (JDO) 1168
20.16 ... XML-Datenbanken ... 1168
20.16.1 ... Apache Xindice ... 1169
20.16.2 ... eXist und Weitere ... 1169
21 ... Reflection ... 1171
21.1 ... Einfach mal reinschauen ... 1173
21.2 ... Mit dem Class-Objekt etwas über Klassen erfahren ... 1173
21.2.1 ... An ein Class-Objekt kommen ... 1173
21.2.2 ... Was das Class-Objekt beschreibt ... 1175
21.2.3 ... Der Name der Klasse ... 1177
21.2.4 ... Oberklassen finden ... 1179
21.2.5 ... Implementierte Interfaces einer Klasse oder eines Inferfaces ... 1180
21.2.6 ... Modifizierer und die Klasse Modifier ... 1180
21.2.7 ... Die Attribute einer Klasse ... 1182
21.2.8 ... Methoden einer Klasse erfragen ... 1185
21.2.9 ... Konstruktoren einer Klasse ... 1188
21.3 ... Objekte manipulieren ... 1190
21.3.1 ... Objekte erzeugen ... 1190
21.3.2 ... Die Belegung der Variablen erfragen ... 1192
21.3.3 ... Variablen setzen ... 1194
21.3.4 ... Private Attribute ändern ... 1195
21.4 ... Methoden aufrufen ... 1196
21.4.1 ... Statische Methoden aufrufen ... 1197
21.4.2 ... Dynamische Methodenaufrufe bei festen Methoden beschleunigen ... 1198
21.5 ... Informationen und Identifizierung von Paketen ... 1200
21.5.1 ... Geladene Pakete ... 1201
22 ... Komponenten durch Bohnen ... 1203
22.1 ... Grundlagen der Komponententechnik ... 1205
22.1.1 ... Brauchen wir überhaupt Komponenten? 1205
22.1.2 ... Visuelle und nichtvisuelle Komponenten ... 1206
22.1.3 ... Andere Komponententechnologien oder: Was uns Microsoft brachte ... 1206
22.2 ... Das JavaBeans Development Kit (BDK) 1207
22.2.1 ... Eine Beispielsitzung im BDK ... 1208
22.2.2 ... Verknüpfungen zwischen Komponenten ... 1209
22.2.3 ... Beans speichern ... 1210
22.3 ... Die kleinste Bohne der Welt ... 1210
22.4 ... Jar-Archive für Komponenten ... 1211
22.5 ... Worauf JavaBeans basieren ... 1212
22.6 ... Eigenschaften ... 1213
22.6.1 ... Einfache Eigenschaften ... 1214
22.6.2 ... Boolesche Eigenschaften ... 1214
22.6.3 ... Indizierte Eigenschaften ... 1215
22.7 ... Ereignisse ... 1216
22.7.1 ... Multicast und Unicast ... 1216
22.7.2 ... Namenskonvention ... 1217
22.8 ... Weitere Eigenschaften ... 1219
22.8.1 ... Gebundene Eigenschaften ... 1219
22.8.2 ... Anwendung von PropertyChange bei AWT-Komponenten ... 1222
22.8.3 ... Veto-Eigenschaften. Dagegen! 1222
22.9 ... Bean-Eigenschaften anpassen ... 1223
22.9.1 ... Customizer ... 1224
22.10 ... Property-Editoren ... 1224
22.11 ... BeanInfo ... 1225
22.12 ... Beliebte Fehler ... 1225
23 ... Java Native Interface (JNI) 1227
23.1 ... Java Native Interface und Invocation-API ... 1229
23.2 ... Die Schritte zur Einbindung einer C-Funktion in ein Java- Programm ... 1230
23.2.1 ... Schreiben des Java-Codes ... 1230
23.2.2 ... Compilieren des Java- Codes ... 1230
23.2.3 ... Erzeugen der Header- Datei ... 1231
23.2.4 ... Implementierung der Methode in C ... 1232
23.2.5 ... Übersetzen der C-Programme und Erzeugen der dynamischen Bibliothek ... 1232
23.2.6 ... Setzen der Umgebungsvariable ... 1233
23.3 ... Erweiterung unseres Programms ... 1233
23.4 ... Erweiterte JNI- Eigenschaften ... 1234
23.4.1 ... Klassendefinitionen ... 1234
23.4.2 ... Zugriff auf Attribute ... 1235
24 ... Sicherheitskonzepte ... 1239
24.1 ... Der Sandkasten (Sandbox) 1241
24.2 ... Sicherheitsmanager (Security Manager) 1241
24.2.1 ... Der Sicherheitsmanager bei Applets ... 1243
24.2.2 ... Sicherheitsmanager aktivieren ... 1245
24.2.3 ... Wie nutzen die Java- Bibliotheken den Sicherheitsmanager? 1246
24.2.4 ... Rechte vergeben durch Policy- Dateien ... 1247
24.2.5 ... Erstellen von Rechte-Dateien mit dem grafischen Policy-Tool ... 1248
24.2.6 ... Kritik an den Policies ... 1249
24.3 ... Dienstprogramme zur Signierung ... 1250
24.3.1 ... Mit keytool Schlüssel erzeugen ... 1250
24.3.2 ... Signieren mit jarsigner ... 1251
24.4 ... Digitale Unterschriften ... 1252
24.4.1 ... Die MDx-Reihe ... 1252
24.4.2 ... Secure Hash Algorithm (SHA) 1253
24.4.3 ... Mit der Security-API einen Fingerabdruck berechnen ... 1253
24.4.4 ... Die Klasse MessageDigest ... 1254
24.4.5 ... Unix-Crypt ... 1256
24.5 ... Verschlüsseln von Datenströmen ... 1257
25 ... Dienstprogramme für die Java-Umgebung ... 1259
25.1 ... Die Werkzeuge im Überblick ... 1261
25.2 ... Der Compiler javac ... 1261
25.2.1 ... Der Java-Interpreter java ... 1262
25.2.2 ... Der Unterschied zwischen java.exe und javaw.exe ... 1263
25.3 ... Das Archivformat Jar ... 1264
25.3.1 ... Das Dienstprogramm Jar benutzen ... 1265
25.3.2 ... Das Manifest ... 1266
25.3.3 ... Jar-Archive für Applets und Applikationen ... 1267
25.4 ... Mit JavaDoc und Doclets dokumentieren ... 1268
25.4.1 ... Mit JavaDoc Dokumentationen erstellen ... 1269
25.4.2 ... Wie JavaDoc benutzt wird ... 1269
25.4.3 ... Eine Dokumentation erstellen ... 1271
25.4.4 ... JavaDoc und Doclets ... 1274
25.5 ... Konvertierung von Java- Bytecode in ein Windows-Exe mit JET ... 1274
25.6 ... Manteln von Java-Klassen in ein Windows-Exe mit JexePack ... 1275
25.7 ... Decompiler ... 1275
25.7.1 ... Jad, ein schneller Decompiler ... 1276
25.7.2 ... SourceAgain ... 1278
25.7.3 ... Decompilieren erschweren ... 1279
25.8 ... Obfuscate Programm RetroGuard ... 1280
25.9 ... Sourcecode Beautifier ... 1280
25.10 ... Ant ... 1281
25.10.1 ... Bezug und Installation von Ant ... 1281
25.10.2 ... Properties ... 1283
25.10.3 ... Externe und vordefinierte Properties ... 1284
25.10.4 ... Weitere Leistungen ... 1284
26 ... Style-Guide ... 1285
26.1 ... Programmierrichtlinien ... 1287
26.2 ... Allgemeine Richtlinien ... 1287
26.3 ... Quellcode kommentieren ... 1287
26.3.1 ... Kommentartypen ... 1288
26.3.2 ... Strategischer und taktischer Kommentar ... 1288
26.3.3 ... Bemerkungen über JavaDoc ... 1289
26.3.4 ... Gotcha-Schlüsselwörter ... 1290
26.4 ... Bezeichnernamen ... 1291
26.4.1 ... Ungarische Notation ... 1291
26.4.2 ... Vorschlag für die Namensgebung ... 1292
26.5 ... Formatierung ... 1293
26.5.1 ... Einrücken von Programmcode – die Vergangenheit ... 1294
26.5.2 ... Verbundene Ausdrücke ... 1294
26.5.3 ... Kontrollierter Datenfluss ... 1295
26.5.4 ... Funktionen ... 1295
26.6 ... Ausdrücke ... 1297
26.7 ... Anweisungen ... 1298
26.7.1 ... Schleifen ... 1298
26.7.2 ... Switch, case und Durchfallen ... 1300
26.8 ... Reihenfolge der Eigenschaften in Klassen ... 1301
26.9 ... Zugriffsrechte und Zugriffsmethoden ... 1302
26.9.1 ... Accessors/Zugriffsmethoden ... 1303
26.10 ... Verweise ... 1303

A ... Literatur ... 1305 A.1 ... Spenden ... 1309

B ... Die Begleit- CD ... 1311

Index ... 1313