Java ist auch eine Insel

Java ist auch eine Insel
v^
Christian Ullenboom
Java ist auch eine Insel
Galileo Computing
Inhalt
Vorwort
33
Vorwort Version 2.0
42
1
Schon wieder eine neue Sprache?
1.1
Der erste Kontakt
1.2
Historischer Hintergrund
1.3
Eigenschaften von Java
1.3.1
1.3.2
1.3.3
1.3.4
1.3.5
1.3.6
1.3.7
1.3.8
Die virtuelle Maschine 45
Kein Präprozessor 46
Überladene Operatoren 47
Zeiger und Referenzen 47
Garbage-Collector 48
Ausnahmenbehandlung 49
Objektorientierung in Java 49
Java-Security-Model 49
1.4
1.4.1
1.4.2
Java im Vergleich zu anderen Sprachen
Java und JavaScript 51
Normierungsversuche 51
43
43
43
44
50
1.5
Die Rolle von Java im Web
1.6
Aufkommen von Stand-alone-Applikationen
1.7
1.7.1
1.7.2
1.7.3
1.7.4
1.7.5
1.7.6
1.7.7
1.7.8
1.7.9
51
52
Entwicklungs- und Laufzeitumgebungen 52
Aller Anfang mit dem Java SDK 52
Die Entwicklungsumgebung von Sun: Sun ONE Studie
(früher Forte) und NetBeans 53
Umgebungen von IBM 53
TogetherJ 54
JBuilder von Borland 54
• Die virtuelle Maschine Kaffe von Transvirtual Technologies 55
Die Entwicklungsumgebung CodeCuide 55
Ein Wort zu Microsoft, Java und zu J++ 56
Direkt ausführbare Programme für Windows compilieren 57
1.8
1.8.1
1.8.2
1.8.3
Installationsanleitung für das Java 2 SDK unter Microsoft Windows
Das Java 2 SDK beziehen 58
Java SDK installieren 58
Compiler und Interpreter nutzen 58
1.9
1.9.1
Das erste Programm compilieren und testen 59
Häufige Compiler-und Interpreterprobleme 61
57
Inhalt
5
6
Inhalt
2
Sprachbeschreibung
2.1
Anweisungen und Programme
2.2
2.2.1
2.2.2
2.2.3
2.2.4
Programme 65
Kommentare 67
Funktionsaufrufe als Anweisungen
Die leere Anweisung 69
Der Block 70
2.3
2.3.1
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
Elemente einer Programmiersprache 70
Textkodierung durch Unicode-Zeichen 70
Unicode-Tabellen unter Windows 72
Bezeichner 72
Reservierte Schlüsselwörter 73
Token 74
Semantik 75
2.4
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.4.7
2.4.8
2.4.9
Datentypen 75
Primitive Datentypen 76
Wahrheitswerte 76
Variablendeklarationen 77
Ganzzahlige Datentypen 78
Die Fließkommazahlen 79
Zeichen 80
Die Typanpassung (das Casting) 81
Lokale Variablen, Blöcke und Sichtbarkeit
Initialisierung von lokalen Variablen 85
2.5
2.5.1
2.5.2
2.5.3
2.5.4
2.5.5
2.5.6
2.5.7
2.5.8
Ausdrücke 86
Zuweisungsoperator und Verbundoperator 87
Präfix- oder Postfix-Inkrement und -Dekrement 88
Unäres Minus und Plus 89
Arithmetische Operatoren 90
Die relationalen Operatoren 93
Logische Operatoren 93
Reihenfolge und Rang der Operatoren in der
Auswertungsreihenfolge 94
Was C(++)-Programmierer vermissen könnten 96
2.6
2.6.1
2.6.2
2.6.3
Bedingte Anweisungen oder Fallunterscheidungen 96
Die if-Anweisung 96
Die Alternative wählen mit einer if/else-Anweisung 98
Die switch-Anweisung bietet die Alternative 101
2.7
2.7.1
2.7.2
2.7.3
2.7.4
2.7.5
2.7.6
Schleifen 103
Die while-Schleife 103
Schleifenbedingungen und Vergleiche mit == 104
Die do/while-Schleife 106
Die for-Schleife 107
Ausbruch planen mit break und Wiedereinstieg mit continue
break und continue mit Sprungmarken 111
63
63
68
84
110
2.8
2.8.1
2.8.2
2.8.3
2.8.4
2.8.5
2.8.6
2.8.7
2.8.8
2.8.9
2.8.10
2.8.11
2.8.12
2.8.13
2.8.14
2.8.15
Methoden einer Klasse 112
Bestandteil einer Funktion 112
Aufruf 114
Methoden ohne Parameter 115
Statische Methoden (Klassenmethoden) 115
Parameter und Wertübergabe 116
Methoden vorzeitig mit return beenden 117
Nicht erreichbarer Quellcode bei Funktionen 118
Rückgabewerte 1}8
Methoden überladen 122
Vorinitialisierte Parameter bei Funktionen 124
Finale lokale Variablen 124
Finale Referenzen in Objekten und das fehlende const
Rekursive Funktionen 126
Die Ackermann-Funktion 128
Die Türme von Hanoi 130
2.9
Weitere Operatoren 132
2.9.1
2.9.2
2.9.3
2.9.4
2.9.5
2.9.6
2.9.7
Bitoperationen 132
Vorzeichenlose Bytes in ein Integer und Char konvertieren
Variablen mit Xor vertauschen 134
Die Verschiebeoperatoren 135
Setzen, Löschen, Umdrehen und Testen von Bits 137
Der Bedingungsoperator 138
Überladenes Plus für Strings 140
2.10
Einfache Benutzereingaben
3
Klassen und Objekte
3.1
3.1.1
3.1.2
Objektorientierte Programmierung 143
Warum überhaupt OOP? 143
Modularität und Wiederverwertbarkeit 144
3.2
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
3.2.6
Klassen benutzen 144
Die Klasse Point 145
Etwas über die UML 146
Anlegen eines Exemplars einer Klasse 147
Zugriff auf Variablen und Methoden mit dem Punkt
Konstruktoren 150
Die null-Referenz 151
3.3
3.3.1
3.3.2
3.3.3
M i t Referenzen arbeiten 152
Zuweisungen bei Referenzen 152
Funktionen mit nichtprimitiven Parametern 153
Gleichheit von Objekten und die Methode equalsO
3.4
3.4.1
3.4.2
3.4.3
Arrays 156
Deklaration von Arrays 156
Arrays mit Inhalt 157
Die Länge eines Arrays mit length
125
133
141
143
149
154
158
Inhalt
7
8
Inhalt
3.4.4
3.4.5
3.4.6
3.4.7
3.4.8
3.4.9
3.4.10
3.4.11
3.4.12
3.4.13
3.4.14
3.4.15
3.4.16
3.4.17
Zugriff auf die Elemente 159
Array-Objekte erzeugen 160
Fehler bei Arrays 161
Arrays mit nichtprimitiven Elementen 162
Arrays und Objekte 162
Initialisierte Array-Objekte 163
Mehrdimensionale Arrays 164
Die Wahrheit über die Array-Initialisierung 166
Arrays kopieren und füllen 167
Mehrere Rückgabeparameter 168
Parameter per Referenz übergeben 169
Der Einstiegspunkt für das Laufzeitsystem 169
Der Rückgabewert von main() 170
Die Klasse Arrays 170
4
Der Umgang mit Zeichenketten
4.1
4.1.1
4.1.2
4.1.3
4.1.4
4.1.5
4.1.6
Strings und deren Anwendung 173
String-Objekte für konstante Zeichenketten
String-Länge 175
Gut, dass wir verglichen haben 175
Stringteile extrahieren 179
Veränderte Strings liefern 181
Typen in Zeichenketten konvertieren 183
4.2
4.2.1
4.2.2
4.2.3
4.2.4
Veränderbare Zeichenketten mit der Klasse StringBuffer 184
Anlegen von StringBuffer-Objekten 185
Die Länge eines StringBuffer-Objekts lesen und setzen 186
Daten anhängen 186
Zeichen(folgen) setzen, erfragen, löschen und umdrehen 186
4.3
4.3.1
Vergleiche von Zeichenketten als String und StringBuffer 187
Sollte es ein equalsO und hashO bei StringBuffer geben? 188
4.4
4.4.1
4.4.2
Ein paar kleine Helfer
Strings einer gegebenen
rechtsbündig ausgeben
Teile im String ersetzen
4.5
Zeichenkodierungen umwandeln
173
173
189
Länge erzeugen und
189
190
191
4.6
Sprachabhängiges Vergleichen mit der Collator-Klasse
4.6.1
Effiziente interne Speicherung für die Sortierung
4.7
Die Klasse StringTokenizer
4.8
StreamTokenizer
195
197
f
«
4.9
Formatieren mit Format-Objekten
4.9.1
4.9.2
4.9.3
Prozente, Zahlen und Währungen ausgeben
Ausgaben formatieren 202
Dezimalzahlformatierung 205
200
202
194
191
4.10
4.10.1
4.10.2
4.10.3
Reguläre Ausdrücke 206
Splitten von Zeichenketten 207
splitO in String 209
Das Paket gnu.regexp 209
4.11
4.11.1
4.11.2
Überprüfung der E-Mail-Adressen und Kreditkarteninformationen
Gültige E-Mail-Adressen 209
Kreditkartennummern testen 211
209
J
5
Mathematisches
215
5.1
5.1.1
Arithmetik in Java 215
Soll eine Division durch Null zur Übersetzungszeit erkannt werden?
5.2
5.2.1
5.2.2
5.2.3
5.2.4
5.2.5
5.2.6
5.2.7
Die Funktionen der Math-Klasse 217
Attribute 217
Winkelfunktionen (trigonometrische Funktionen und
Arcus-Funktionen) 218
Runden von Werten 218
Exponentialfunktionen 220
Division 220
Absolutwerte und Maximum, Minimum 221
Zufallszahlen 221
5.3
5.3.1
5.3.2
Mathe bitte strikt 222
Strikt Fließkomma mit strictfp 222
Die Klassen Math und StrictMath 222
5.4
Die Random-Klasse
5.5
5.5.1
5.5.2
Große Zahlen 224
Die Klasse Biginteger 224
Ganz lange Fakultäten 227
5.6
Probleme mit Java und der Mathematik
5.7
Das Java-Matrix-Paket Jama
228
6
Eigene Klassen schreiben
231
6.1
6.1.1
6.1.2
6.1.3
6.1.4
Eigene Klassen definieren 231
Methodenaufrufe und Nebeneffekte 232
Argumentübergabe mit Referenzen 233
Die this-Referenz 234
Überdeckte Objektvariablen nutzen 235
6.2
Assoziationen zwischen Objekten
6.3
6.3.1
6.3.2
6.3.3
6.3.4
Privatsphäre und Sichtbarkeit 237
Wieso nicht freie Methoden und Variablen für alle? 238
Privat ist nicht ganz privat. Es kommt darauf an, wer's sieht
Zugriffsmethoden für Attribute definieren 241
Zusammenfassung zur Sichtbarkeit 242
216
223
228
236
239
Inhalt
9
10
Inhalt
6.4
6.4.1
6.4.2
6.4.3
6.4.4
6.4.5
6.4.6
6.4.7
6.4.8
Statische Methoden und Variablen 243
Warum statische Eigenschaften sinnvoll sind 243
Statische Eigenschaften mit static 243
Statische Eigenschaften als Objekteigenschaften nutzen 244
Statische Eigenschaften und Objekteigenschaften 245
Statische Variablen zum Datenaustausch 245
Warum die Groß- und Kleinschreibung wichtig ist 246
Konstanten mit dem Schlüsselwort final bei Variablen 247
Typsicherere Konstanten 248
6.4.9
Statische Blöcke
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
Objekte anlegen und zerstören 250
Konstruktoren schreiben 250
Einen anderen Konstruktor der gleichen Klasse aufrufen 253
Initialisierung der Objekt-und Klassenvariablen 255
Finale Werte im Konstruktor setzen 257
Exemplarinitialisierer (Instanzinitialisierer) 257
Zerstörung eines Objekts durch den Müllaufsammler 258
249
6.5.7
Implizit erzeugte Stringobjekte
6.5.8
Zusammenfassung: Konstruktoren und Methoden
259
6.6
Veraltete (deprecated) Methoden/Konstruktoren
6.7
6.7.1
6.7.2
6.7.3
Vererbung 262
Vererbung in Java 262
Einfach- und Mehrfachvererbung
Kleidungsstücke modelliert 263
260
261
263
6.7.4
Sichtbarkeit
6.7.5
6.7.6
Das Substitutionsprinzip 265
Automatische und Explizite Typanpassung
265
6.7.7
Finale Klassen
266
267
6.7.8
Unterklassen prüfen mit dem Operator instanceof
6.8
6.8.1
6.8.2
6.8.3
Methoden überschreiben 268
super: Aufrufen einer Methode aus der Oberklasse
Nicht überschreibbare Funktionen 271
Fehlende kovariante Rückgabewerte 272
267
6.9
6.9.1
6.9.2
6.9.3
6.9.4
6.9.5
6.9.6
6.9.7
Die oberste aller Klassen: Object 272
Klassenobjekte 273
Hashcodes 273
Objektidentifikation mit toStringO 273
Objektgleichheit mit equals() und Identität
Klonen eines Objekts mit cloneO 276
Aufräumen mit finalizeO 277
Synchronisation 277
*
6.10
6.10.1
6.10.2
6.10.3
Die Oberklasse gibt Funktionalität vor 278
Dynamisches Binden als Beispiel für Polymorphie 279
Keine Polymorphie bei privaten, statischen und finalen Methoden
Konstruktoren in der Vererbung 282
269
274
281
6.11
6.11.1
6.11.2
6.11.3
Abstrakte Klassen 286
Abstrakte Klassen 286
Abstrakte Methoden 287
Über abstract final 290
6.12
6.12.1
6.12.2
6.12.3
6.12.4
6.12.5
6.13
6.13.1
6.13.2
6.13.3
6.13.4
6.13.5
6.13.6
6.13.7
6.13.8
6.14
Schnittstellen 290
Die Mehrfachvererbung bei Schnittstellen 294
Erweitern von Interfaces - Sübinterfaces 295
Vererbte Konstanten bei Schnittstellen 295
Vordefinierte Methoden einer Schnittstelle 297
CharSequence als Beispiel einer Schnittstelle 298
Innere Klassen 300
Geschachtelte Top-Level-Klassen und Schnittstellen
Mitglieds-oder Elementklassen 301
Lokale Klassen 304
Anonyme innere Klassen 305
Eine Sich-Selbst-Implementierung 308
this und Vererbung 309
Implementierung einer verketteten Liste 310
Funktionszeiger 312
Gegenseitige Abhängigkeiten von Klassen 314
6.15
Pakete
7
Exceptions
7.1
7.1.1
7.1.2
7.1.3
7.1.4
7.1.5
7.1.6
Problembereiche einzäunen 317
Exceptions in Java mit try und catch 317
Ablauf einer Ausnahmesituation 319
Wiederholung kritischer Bereiche 319
throws im Methodenkopf angeben 320
Abschließende Arbeiten mit finally 321
Nicht erreichbare catch-Klauseln 322
7.2
7.2.1
7.2.2
7.2.3
7.2.4
Die Klassenhierarchie der Fehler 323
Die Exception-Hierarchie 324
Ober-Ausnahmen fangen 324
Alles geht als Exception durch 325
Ausnahmen, die nicht gefangen werden müssen: RuntimeException
7.3
7.3.1
7.3.2
7.3.3
Werfen eigener Exceptions 327
Vorgefertigte Ausnahme-Objekte wiederverwenden 328
Typecast auf ein null-Objekt für eine NullPointerException
Neue Exception-Klassen definieren 329
7.4
Rückgabewerte bei ausgelösten Ausnahmen
7.5
Stack-Aufruf analysieren
7.6
Assertions
7.7
7.7.1
Sicherheitsfragen mit dem SecurityManager klären
Programm beenden 335
i
301
314
317
326
329
331
332
333
335
Inhalt
11
12
Inhalt
8
Die Funktionsbibliothek
337
8.1
8.1.1
Die Java-Klassenphilosophie 337
Übersicht über die Pakete der Standardbibliothek
8.2
8.2.1
8.2.2
8.2.3
8.2.4
8.2.5
8.2.6
8.2.7
Wrapper-Klassen 342
Die Character-Klasse 343
Die Boolean-Klasse 345
Die Number-Klasse 347
Die Klasse Integer 348
Behandlung von Überlauf 350
Unterschiedliche Ausgabeformate
Boxing und Unboxing 352
8.3
8.3.1
8.3.2
Ausführung von externen Programmen 353
DOS-Programme aufrufen 354
Die Windows Registry verwenden 356
8.4
8.4.1
Kompilieren von Klassen
DerSun-Compiler 357
9
Threads und nebenläufige Programmierung
9.1
9.1.1
Prozesse und Threads 359
Wie parallele Programme die Geschwindigkeit heben können
9.2
9.2.1
9.2.2
9.2.3
9.2.4
Threads erzeugen 362
Threads über die Schnittstelle Runnable implementieren 362
Threads über Runnable starten 363
Die Klasse Thread erweitern 364
Erweitern von Thread oder implementieren von Runnable? 367
9.3
Threads schlafen
9.3.1
Eine Zeituhr
9.4
Die Klassen Timer und TimerTask
9.5
Die Zustände eines Threads
9.5.1
9.5.2
9.5.3
9.5.4
9.5.5
Das Ende eines Threads 371
Einen Thread höflich mit Interrupt beenden
Der stop() von außen 373
Das ThreadDeath-Objekt 374
Auf das Ende warten mit join() 375
9.6
Arbeit niederlegen und wieder aufnehmen
9.7
9.7.1
9.7.2
Priorität 377
Threads hoher Priorität und das AWT
Granularität und Vorrang 378
9.8
Dämonen (engl. Daemon)
337
351
357
359
360
367
368
370
371
371
377
378
379
9.9
Kooperative und nicht kooperative Threads
9.10
9.10.1
9.10.2
Synchronisation über kritische Abschnitte 381
Gemeinsam genutzte Daten 382
Probleme beim gemeinsamen Zugriff und kritische Abschnitte
380
382
9.10.3
9.10.4
9.10.5
9.10.6
9.10.7
9.10.8
9.10.9
9.10.10
9.10.11
9.10.12
Punkte parallel initialisieren 383
i++sieht atomar aus, ist es aber nicht 383
Abschnitte mit synchronized schützen 384
Monitore 385
Synchronized-Methode am Beispiel der Klasse StringBuffer 386
Synchronisierte Blöcke 386
Vor-und Nachteile von synchronisierten Blöcken und Methoden
Nachträglich synchronisieren 388
Monitore sind reentrant, gut für die Geschwindigkeit 388
Deadlocks 389
9.11
Variablen mit volatile kennzeichnen
9.12
9.12.1
9.12.2
9.12.3
9.12.4
9.12.5
Synchronisation über Warten und Benachrichtigen
Warten mit waitO und Aufwecken mit notifyO 394
Mehrere Wartende und notifyAHO 396
waitO mit einer Zeitspanne 396
Beispiel Erzeuger-Verbraucher-Programm 396
Semaphoren 399
387
391
393
9.13
Grenzen von Threads
9.14
Aktive Threads in der Umgebung
401
9.15
Gruppen von Threads in einer Thread-Gruppe
9.15.1
9.15.2
9.15.3
Etwas über die aktuelle Thread-Gruppe herausfinden 403
Threads in einer Thread-Gruppe anlegen 405
Methoden von Thread und ThreadGroup im Vergleich 407
9.16
Einen Abbruch der virtuellen Maschine erkennen
10
Raum und Zeit
10.1
Greenwich Mean Time (GMT)
10.2
Wichtige Datum-Klassen im Überblick
10.3
10.3.1
Zeitzonen und Sprachen der Länder 413
Zeitzonen durch die Klasse TimeZone repräsentieren
10.4
Sprachen der Länder
10.4.1
Sprachen in Java über Locale-Objekte
10.5
Einfache Übersetzung durch ResourceBundle-Objekte
10.6
10.6.1
10.6.2
Die Klasse Date 420
Objekte erzeugen und Methoden nutzen
Zeitmessung und Profiling 422
10.7
10.7.1
10.7.2
Calendar und GregorianCalendar 423
Die abstrakte Klasse Calendar 423
Der gregorianische Kalender 425
10.8
10.8.1
10.8.2
10.8.3
Formatieren der Datumsangaben 431
Mit DateFormat und SimpleDateFormat formatieren 431
Parsen von Datumswerten 438
Parsen und Formatieren ab bestimmten Positionen 440
401
402
408
411
411
413
413
415
415
418
420
Inhalt
13
11
Datenstrukturen und Algorithmen
11.1
M i t einem Iterator durch die Daten wandern
11.1.1
Bauernregeln aufzählen
11.2
Dynamische Datenstrukturen
Inhalt
441
442
444
11.3
Die Klasse Vector
11.3.1
11.3.2
11.3.3
11.3.4
11.3.5
11.4
11.4.1
11.4.2
Vektoren erzeugen 444
Funktionen 445
Arbeitsweise des internen Arrays 448
Die Größe eines Felds 449
Eine Aufzählung und gleichzeitiges Verändern
Stack, der Stapel 451
Die Methoden von Stack 451
Ein Stack ist ein Vektor - aha! 452
11.5
11.5.1
11.5.2
11.5.3
11.5.4
11.5.5
11.5.6
Die Klasse Hashtable und assoziative Speicher 452
Ein Objekt der Klasse Hashtable erzeugen 452
Einfügen und Abfragen der Datenstruktur 453
Die Arbeitsweise einer Hashtabelle 455
Aufzählen der Elemente 457
Ausgabe der Hashtabelle und Gleichheitstest 457
Klonen 458
11.6
11.6.1
11.6.2
11.6.3
Die abstrakte Klasse Dictionary 458
Zugriff und Abfrage 458
Metainformationen 459
Iterationen über die Elemente 459
11.7
11.7.1
11.7.2
11.7.3
11.7.4
11.7.5
11.7.6
Die Properties-Klasse 460
Über die Klasse Properties 460
putO, getO und getPropertiesO 462
Eigenschaften ausgeben 462
Systemeigenschaften der Java-Umgebung 463
Browser-Version abfragen 464
Properties von der Konsole aus setzen 464
11.8
Windows-typische INI-Datelen
11.9
Queue, die Schlange
11.10
11.10.1
11.10.2
11.10.3
11.10.4
11.10.5
Die Collection-API
11.10.6
11.10.7
11.10.8
11.10.9
14
441
444
449
466
466
467
Die Schnittstelle Collection 468
Schnittstellen, die Collection erweitern, und Map 469
Abstrakte Basisklassen für Container 471
Konkrete Container-Klassen 472
Unterschiede zu den älteren Datenstrukturen und die
Synchronisation 472
__
Das erste Programm mit Container-Klassen 473
Iteratoren 474
Der Comparator 476
toArrayO von Collection verstehen - Chance für
eine Falle erkennen 478
11.11
Listen 480
11.11.1 AbstractList 481
11.11.2 Optionale Methoden
11.11.3 ArrayList 485
11.11.4 LinkedList 486
482
11.12
Algorithmen 486
11.12.1 Datenmanipulation 488
11.12.2 Größten und kleinsten Wert einer Collection finden
11.12.3 Sortieren 490
11.12.4 Elemente in der Collection suchen 493
489
11.13
Typsichere Datenstrukturen
494
11.14
11.14.1
11.14.2
11.14.3
11.14.4
Die Klasse BitSet für Bitmengen 495
Ein BitSet anlegen und füllen 495
Mengenorientierte Operationen 497
Funktionsübersicht 497
Primzahlen in einem BitSet verwalten 498
11.15
11.15.1
11.15.2
Ein Design-Pattern durch Beobachten von Änderungen
Design-Pattern 499
Das Beobachter-Pattern (Observer/Observable) 500
12
Datenströme und Dateien
12.1
12.1.1
12.1.2
12.1.3
12.1.4
12.1.5
12.1.6
12.1.7
Dateien und Verzeichnisse 505
Dateien und Verzeichnisse mit der Klasse File 506
Dateieigenschaften und-attribute 506
Umbenennen, Verzeichnisse anlegen und Datei löschen 509
Die Wurzel aller Verzeichnisse 509
Verzeichnisse listen und Dateien filtern 511
Implementierungsmöglichkeiten für die Klasse File 515
Verzeichnisse nach Dateien rekursiv durchsuchen 516
12.2
12.2.1
12.2.2
12.2.3
12.2.4
Dateien mit wahlfreiem Zugriff 518
Ein RandomAccessFile öffnen 518
Aus dem RandomAccessFile lesen 519
Hin und her in der Datei 520
Die Länge des RandomAccessFile 521
12.3
12.3.1
Übersicht über wichtige Stream-und WriterReader
Die abstrakten Basisklassen 524
12.4
12.4.1
12.4.2
12.4.3
12.4.4
12.4.5
12.4.6
12.4.7
12.4.8
Eingabe-und Ausgabe-Klassen: InputStream und OutputStream 524
Die Klasse OutputStream 524
Ein Datenschlucker 526
Die Eingabeklasse InputStream 526
Anwenden der Klasse FilelnputStream 527
Anwendung der Klasse FileOutputStream 529
Kopieren von Dateien 530
Daten filtern durch FilterlnputStream und FilterOutputStream 531
Der besondere Filter PrintStream 532
499
505
522
Inhalt
15
12.4.9
System.in und System.out 534
12.4.10 Bytes in den Strom mit ByteArrayOutputStream 538
12.4.11 Ströme zusammensetzen mit SequencelnputStream 539
16
Inhalt
12.5
Ressourcen wie Grafiken aus dem Klassenpfad und
aus Jar-Archiven laden 542
12.6
12.6.1
12.6.2
12.6.3
12.6.4
12.6.5
12.6.6
12.6.7
12.6.8
Die Unterklassen von Writer 543
Die abstrakte Klasse Writer 543
Datenkonvertierung durch den OutputStreamWriter 545
In Dateien schreiben mit der Klasse FileWriter 546
StringWriter und CharArrayWriter 547
Writer als Filter verketten 549
Gepufferte Ausgabe durch BufferedWriter 550
Ausgabemöglichkeiten durch PrintWriter erweitern 553
Daten mit FilterWriter filtern 554
12.7
12.7.1
12.7.2
12.7.3
12.7.4
Die Klassen um Reader 560
Die abstrakte Basisklasse Reader 560
Automatische Konvertierungen mit dem InputStreamReader
Dateien lesen mit der Klasse FileReader 563
StringReader und CharArrayReader 564
12.8
12.8.1
12.8.2
12.8.3
12.8.4
Schachteln von Eingabe-Streams 566
Gepufferte Eingaben mit der Klasse BufferedReader 566
LineNumberReader zählt automatisch Zeilen mit 567
Eingaben filtern mit der Klasse FilterReader 569
Daten zurücklegen mit der Klasse PushbackReader 572
12.9
12.9.1
12.9.2
Kommunikation zwischen Threads mit Pipes 575
PipedOutputStream und PipedlnputStream 575
PipedWriter und PipedReader 577
12.10
12.10.1
12.10.2
Datenkompression 578
Datenströme komprimieren
Zip-Archive 582
12.11
12.11.1
12.11.2
12.11.3
Prüfsummen 590
Die Schnittstelle Checksum
Die Klasse CRC32 591
Die Adler32-Klasse 594
12.12
12.12.1
12.12.2
12.12.3
12.12.4
12.12.5
12.12.6
12.12.7
12.12.8
12.12.9
12.12.10
Persistente Objekte und Serialisierung 595
Objekte speichern 596
Objekte lesen 598
Die Schnittstelle Serializable 600
Tiefe Objektkopien 601
Felder sind implizit Serializable 603
Versionenverwaltung und die SUID 603
Beispiele aus den Standard-Klassen 606
Serialisieren in XML-Dateien 607
JSX (Java Serialization to XML) 6 0 f
XML-API von Sun 611
12.13
Die Logging-API
612
579
591
562
13
Die extensible Markup Language (XML)
617
13.1
13.1.1
13.1.2
Auszeichnungssprachen 617
Die Standard Generalized Markup Language (SGML)
Extensible Markup Language (XML) 618
13.2
13.2.1
13.2.2
13.2.3
13.2.4
13.2.5
Eigenschaften von XML-Dokumenten 618
Elemente und Attribute 618
Beschreibungssprache für den Aufbau von XML-Dokumenten
Schema - eine Alternative zu DTD 623
Namensraum (Namespace) 626
XML-Applikationen 627
13.3
13.3.1
13.3.2
13.3.3
Die Java APIs für XML 627
Das Document Object Model (DOM) 628
Simple API for XML Parsing (SAX) 628
Java Document Object Model (JDOM) 628
13.4
13.4.1
13.4.2
13.4.3
13.4.4
13.4.5
13.4.6
13.4.7
13.4.8
13.4.9
13.4.10
13.4.11
XML-Dateien mit JDOM verarbeiten 628
JDOM beziehen 629
Paketübersicht 629
Die Document-Klasse 631
Eingaben aus der Datei lesen 631
Das Dokument als XML-Datei ausgeben 632
Der Dokumenttyp 632
Elemente 633
Zugriff auf Elementinhalte 635
Liste mit Unterelementen erzeugen 637
Neue Elemente einfügen und ändern 638
Attributinhalte lesen und ändern 640
13.5
13.5.1
13.5.2
JAXP als Java-Schnittstelle zu XML 643
Einführung in XSLT 644
Umwandlung von XML-Dateien mit JDOM und JAXP
13.6
13.6.1
Serielle Verarbeitung von XML mit SAX 647
Ausgabe der Datei party.xml mit SAX 648
14
Grafikprogrammierung mit dem AWT
14.1
14.1.1
Das Abstract-Window-Toolkit
Java Foundation Classes 651
14.2
14.2.1
14.2.2
14.2.3
Fenster unter grafischen Oberflächen 652
Fenster öffnen 652
Größe und Position des Fensters verändern 655
Fenster und Dialog-Dekoration 656
617
620
647
651
651
14.3
Das Toolkit
14.3.1
Einen Hinweis beepen
656
14.4
14.4.1
14.4.2
Grundlegendes zum Zeichnen 657
Die paintO-Methode 657
Auffordern zum Neuzeichnen mit repaintO
657
659
Inhalt
17
14.5
14.5.1
14.5.2
Punkte, Linien und Rechtecke aller Art
Linien 660
Rechtecke 661
660
14.6
Alles was rund ist
14.7
14.7.1
14.7.2
14.7.3
Polygone und Polylines 663
Die Polygon-Klasse 664
N-Ecke zeichnen 665
Vollschlanke Linien zeichnen 667
14.8
14.8.1
14.8.2
14.8.3
14.8.4
Zeichenketten schreiben 668
Einen neuen Zeichensatz bestimmen 669
Zeichensätze des Systems ermitteln 671
Die Klasse FontMetrics 673
True Type Fonts 675
14.9
Cllpping-Operationen
662
677
14.10
Farben 681
14.10.1 Zufällige Farbblöcke zeichnen 682
14.10.2 Farbanteile zurückgeben 683
14.10.3 Vordefinierte Farben 683
14.10.4 Farben aus Hexadezimalzahlen erzeugen 684
14.10.5 Einen helleren oder dunkleren Farbton wählen
14.10.6 Farbmodelle HSB und RGB 687
14.10.7 Die Farben des Systems 687
685
14.11
14.11.1
14.11.2
14.11.3
14.11.4
14.11.5
Bilder anzeigen und Grafiken verwalten 692
Eine Grafik zeichnen 694
Grafiken zentrieren 696
Laden von Bildern mit dem MediaTracker beobachten
Kein Flackern durch Double-Buffering 701
Bilder skalieren 703
14.12
14.12.1
Programm-Icon setzen
Volatilelmage 706
697
705
14.13
Grafiken speichern 707
14.13.1 Bilder im GIF-Format speichern 707
14.13.2 Gif speichern mit dem ACME-Paket 709
14.13.3 JPEG-Dateien mit dem Sun-Paket schreiben 709
14.13.4 Java Image Management Interface (JIMI) 712
14.14
Von Produzenten, Konsumenten und Beobachtern
14.14.1 Producer und Consumer für Bilder 714
14.14.2 Beispiel für die Übermittlung von Daten 715
14.14.3 Bilder selbst erstellen 718
14.14.4 Die Bildinformationen wieder auslesen 721
14.15
Filter 724
14.15.1 Grundlegende Eigenschaft von Filtern 724
14.15.2 Konkrete Filterklassen 725
14.15.3 Mit CropImageFilter Teile ausschneiden 726
14.15.4 Transparenz 727
18
Inhalt
714
'S
14.16
14.16.1
14.16.2
14.16.3
Alles wird bunt mit Farbmodellen 727
Die abstrakte Klasse ColorModel 728
Farbwerte im Pixel mrt der Klasse DirectColorModel
Die Klasse IndexColorModel 731
14.17
14.17.1
14.17.2
14.17.3
14.17.4
14.17.5
Drucken 735
Drucken mit dem einfachen Ansatz 735
Ein Prinüob 736
Drucken der Inhalte 738
Komponenten drucken 738
Den Drucker am Parallelport ansprechen 739
14.18
14.18.1
14.18.2
14.18.3
14.18.4
Java2D-API 739
Grafische Objekte zeichnen 740
Geometrische Objekte durch Shape gekennzeichnet 741
Eigenschaften geometrischer Objekte 743
Transformationen mit einem AffineTransform-Objekt 751
14.19
Graphic Layers Framework
730
752
14.20
Grafikverarbeitung ohne grafische Oberfläche
14.20.1 Xvfb-Server 753
14.20.2 Pure Java AWT Toolkit (PJA) 753
753
15
Komponenten, Container und Ereignisse
755
15.1
15.1.1
15.1.2
15.1.3
15.1.4
15.1.5
15.1.6
Es tut sich was - Ereignisse beim AWT 755
Was ist ein Ereignis? 755
Die Klasse AWTEvent 755
Events auf verschiedenen Ebenen 755
Ereignisquellen, -senken und Horcher (Listener)
Listener implementieren 758
Listener bei Ereignisauslöser anmelden 759
15.2
15.2.1
15.2.2
15.2.3
15.2.4
Varianten, das Fenster zu schließen 760
Eine Klasse implementiert die Schnittstelle WindowListener
Adapterklassen nutzen 763
Innere Mitgliedsklassen und innere anonyme Klassen 764
Generic Listener 765
15.3
15.3.1
15.3.2
15.3.3
15.3.4
15.3.5
Komponenten im AWT und in Swing 765
Peer-Klassen und Lightweight-Komponenten 766
Die Basis aller Komponenten: Component und JComponent
Proportionales Vergrößern eines Fensters 768
Dynamisches Layout während einer Größenänderung 770
Hinzufügen von Komponenten 770
15.4
15.4.1
15.4.2
Das Swing-Fenster JFrame 772
Kinder auf einem Swing-Fenster 772
Schließen eines Swing-Fensters 772
15.5
15.5.1
Ein Informationstext über die Klasse JLabel
Mehrzelliger Text 776
758
760
767
773
Inhalt
19
15.6
15.6.1
Die Klasse Imagelcon 776
Die Schnittstelle Icon 778
15.6.2
Was Icon und Image verbindet
15.7
15.7.1
15.7.2
15.7.3
Eine Schaltfläche (JButton) 780
Der aufmerksame ActionListener 782
Generic Listener für Schaltflächen-Ereignisse verwenden
AbstractButton 787
15.7.4
JToggleButton 789
15.8
Tooltips 789
780
15.9
Horizontale und vertikale Schieberegler 790
15.9.1
Der AdjustmentListener, derauf Änderungen hört
15.10
JSIider
15.11
15.11.1
Ein Auswahlmenü - Choice, JComboBox
ItemListener 799
15.12
Eines aus vielen - Kontrollfelder (JCheckBox)
15.12.1
Ereignisse über ItemListener
15.13
Kontrollfeldgruppen, Optionsfelder und JRadioButton
15.14
Der Fortschrittsbalken JProgressBar
784
793
795
796
800
801
15.15
Rahmen (Borders)
15.16
Symbolleisten alias Toolbars 808
15.17
Menüs
802
804
805
810
15.17.1 Die Menüleisten und die Einträge 810
15.17.2 Menüeinträge definieren 811
15.17.3 Mnemonics und Short-Cuts (Accelerator) 812
15.17.4 Beispiel für ein Programm mit Menüleisten 814
15.18
Popup-Menüs
819
15.19
Alles Auslegungssache: Die Layoutmanager
15.19.1 Null-Layout 822
15.19.2 FlowLayout 823
15.19.3 BorderLayout 825
15.19.4 GridLayout 827
15.19.5 Der GridBagLayout-Manager 829
822
15.19.6 Weitere Layoutmanager 834
15.20
Der Inhalt einer Zeichenfläche: JPanel
834
15.21
Das Konzept des Model-View-Controllers
15.22
List-Boxen
15.23
JSpinner
15.24
Texteingabefelder
835
837
839
^
841
15.24.1 Text in einer Eingabezeile 841
15.24.2 Die Oberklasse der JText-Komponenten: JTextComponent
15.24.3 JPasswordField 843
/
20
Inhalt
842
15.24.4 Validierende Eingabefelder 844
15.24.5 Mehrzellige Textfelder 845
15.24.6 Die Editor-Klasse JEditorPane 847
15.25
15.25.1
Bäume mit JTree-Objekten 850
Selektionen bemerken 851
15.26
Tabellen mit JTable 852
15.26.1 Ein eigenes Modell 853
15.26.2 AbstractTableModel 854
15.26.3 DefaultTableModel 856
15.26.4 Ein eigener Renderer für Tabellen
15.27
JRootPane und JLayeredPane
858
861
15.28
Dialoge
15.28.1
Der Farbauswahldialog JColorChooser
862
15.28.2 Der Dateiauswahldialog
863
865
15.29
Das Java Look&Feel
868
15.30
Die Zwischenablage (Clipboard)
15.31
Undo durchführen
15.32
Ereignisverarbeitung auf unterster Ebene
869
872
874
15.33
AWT, Swing und die Threads 875
15.33.1 Warum Swing nicht Thread-sicher ist 876
15.33.2 Swing-Elemente bedienen mit invokeLaterO und invokeAndWaitO
15.34
Selbst definierte Cursor
15.34.1
Flackern des Mauszeigers bei Animationen vermeiden
15.35
Mausrad-Unterstützung
15.36
Benutzerinteraktionen automatisieren
16
Netzwerkprogrammierung
16.1
16.1.1
Grundlegende Begriffe 885
Internet-Standards und RFC 885
16.2
16.2.1
16.2.2
16.2.3
URL-Verbindungen und URL-Objekte 886
Die Klasse URL 887
Informationen über eine URL 889
Der Zugriff auf die Daten über die Klasse URL
16.3
16.3.1
16.3.2
16.3.3
16.3.4
Die Klasse URLConnection 894
Methoden und Anwendung von URLConnection 894
Protokoll- und Content-Handler 897
Im Detail: von URL zu URLConnection 898
Autorisierte URL-Verbindungen mit Basic Authentication
16.4
16.4.1
16.4.2
16.4.3
Das Common Gateway Interface 901
Parameter für ein CGI-Programm 901
Kodieren der Parameter für CGI-Programme
Eine Suchmaschine ansprechen 904
878
880
881
882
882
885
892
899
902
Inhalt
21
16.5
16.5.1
16.5.2
16.5.3
Host- und IP-Adressen 904
Klasse-K-Netz 906
IP-Adresse des lokalen Hosts 906
Die Methode getAIIByNameO 907
16.6
Networkinterface
908
16.7
IPv6 für Java mit Jipsy
16.8
16.8.1
16.8.2
16.8.3
16.8.4
16.8.5
16.8.6
Socket-Programmierung 910
Das Netzwerk ist der Computer 910
Standarddienste unter Windows nachinstallieren
Stream-Sockets 912
Informationen über den Socket 914
Mit telnet an den Ports horchen 916
Ein kleines Echo - lebt der Rechner noch? 916
909
16.9
16.9.1
16.9.2
Client/Server-Kommunikation 917
Warten auf Verbindungen 918
Ein Multiplikations-Server 919
16.10
SLL-Verbindungen mit JSSE 920
16.11
Webprotokolle mit NetComponents nutzen
16.12
16.12.1
16.12.2
16.12.3
16.12.4
16.12.5
E-Mail 922
Wie eine E-Mail um die Welt geht 922
Übertragungsprotokolle 922
Das Simple Mail Transfer Protocol 925
E-Mails versenden mit Suns JavaMail-API
E-Mails mittels POP3 abrufen 926
16.13
16.13.1
16.13.2
16.13.3
Arbeitsweise eines Webservers 928
Das Hypertext Transfer Protocol (HTTP) 928
Anfragen an den Server 929
Die Antworten vom Server 932
16.14
16.14.1
16.14.2
16.14.3
16.14.4
16.14.5
16.14.6
16.14.7
Datagram-Sockets 935
Die Klasse DatagramSocket 937
Datagramme und die Klasse Datagram Packet 939
Auf ein hereinkommendes Paket warten 939
Ein Paket zum Senden vorbereiten 941
Methoden der Klasse Datagram Packet 941
Das Paket senden 942
Die Zeitdienste und ein eigener Server und Client 943
Multicast-Kommunikation
947
i
22
Inhalt
921
925
16.15
Internet Control Message Protocol (ICMP)
16.15.1 Ping 946
16.16
912
946
17
Servlets und Java Server Pages
949
17.1
17.1.1
17.1.2
17.1.3
Dynamische Webseiten und Servlets 949
Was sind Servlets? 949
Was sind Java Server Pages? 950
Vorteil von JSP/Servlets gegenüber CGI-Programmen
17.2
17.2.1
17.2.2
17.2.3
Vom Client zum Server und wieder zurück 952
Der bittende Client 952
Was erzeugt ein Webserver für eine Antwort? 954
Wer oder was ist MIME? 954
17.3
17.3.1
17.3.2
17.3.3
Servlets und Java Server Pages entwickeln und testen
Servlet-Container 956
Webserver mit Servlet-Funktionalität 956
Tomcat 957
17.4
17.4.1
Java Server Pages 958
JSP mit Tomcat nutzen 958
17.5
17.5.1
17.5.2
17.5.3
17.5.4
Skript-Elemente 959
Scriptlets 959
Ausdrücke 960
Deklarationen 960
Kommentare und Quoting
17.6
Webapplikationen
951
955
961
961
17.7
Implizite Objekte
17.8
Entsprechende XML-Tags
962
17.9
Was der Browser mit auf den Weg gibt - HttpServletRequest
17.9.1
17.9.2
17.9.3
Verarbeiten der Header 964
Hilfsfunktion im Umgang mit Headern
Übersicht der Browser-Header 965
17.10
Formulardaten
963
964
965
966
17.11
Das HttpServletResponse-Objekt
17.11.1 Automatisches Neuladen 968
17.11.2 Seiten umlenken 969
17.12
JSP-Direktiven 970
17.12.1 page-Direktiven im Überblick
17.12.2 include-Direktive 972
968
970
17.13
17.13.1
17.13.2
17.13.3
Aktionen 972
Aktion include 973
Aktion forward 973
Aktion plugin 973
17.14
17.14.1
17.14.2
Beans 974
Beans in JSP-Seiten anlegen, Attribute setzen und erfragen
Der schnelle Zugriff auf Parameter 976
975
Inhalt
23
17.15
17.15.1
17.15.2
17.15.3
17.15.4
17.15.5
17.15.6
Kleine Kekse: die Klasse Cookies 976
Cookies erzeugen und setzen 977
Cookies vom Servlet einlesen 977
Kleine Helfer für Cookies 979
Cookie-Status ändern 979
Langlebige Cookies 981
Ein Warenkorbsystem 981
17.16
Sitzungsverfolgung (Session Tracking) 982
17.16.1 Das mit einer Sitzung verbundene Objekt HttpSession 983
17.16.2 Werte mit einer Sitzung assoziieren und auslesen 983
17.16.3 URL-Rewriting 984
17.16.4 Zusätzliche Informationen 985
17.17
Tag-Libraries 987
17.17.1 Standard Tag Library (JSTL) der Apache-Gruppe
17.17.2 Beispiel mit einer Taglib-Direktive 989
17.18
17.18.1
17.18.2
Das erste Servlet kompilieren und ausführen
Servlets kompilieren 991
Wohin mit dem Servlet? 992
988
991
17.19
Der Lebenszyklus eines Servlets 992
17.19.1 Initialisierung in init() 993
17.19.2 Abfragen bei serviceO 995
17.19.3 Mehrere Anfragen beim Servlet und die Thread-Sicherheit
17.19.4 Das Ende eines Servlets 997
17.20
Das HttpServletResponse-Objekt 997
17.20.1 Wir generieren eine Webseite 997
17.20.2 Binärdaten senden 999
17.20.3 Komprimierte Daten mit Content-Encoding 1000
17.20.4 Noch mehr über Header, die der Server setzt 1001
17.21
Servlets und Sessions
1002
17.22
Weiterleiten und Einbinden von Servlet-Inhalten
17.23
17.23.1
Inter-Servlet-Kommunikation
Daten zwischen Servlets teilen
17.24
17.24.1
17.24.2
17.24.3
Internationalisierung 1005
Die Länderkennung des Anfragers auslesen 1005
Länderkennung für die Ausgabe setzen 1005
Westeuropäische Texte senden 1006
17.25
17.25.1
Sonstiges zu den Servern 1007
Den internen Compiler bei Tomcat für JSP ändern
1004
1004
17.26
Tomcat: Spezielles 1007
17.26.1 Tomcat als Service unter Windows NT ausführen
17.26.2 MIME-Types mit Tomcat verbinden 1008
17.26.3 Servlets beim Start laden 1008 ""
24
Inhalt
1003
1007
1007
996
17.27
Ein Servlet generiert WAP-Seiten für das Handy 1008
17.27.1 Ein WAP-Handy simulieren 1009
17.27.2 Übersicht der wichtigsten Tags 1010
17.27.3 Der Gateway 1011
17.27.4 WML-Seiten aufbauen 1013
17.27.5 Interessante Links zum Thema Servlets/JSP 1013
17.28
Text in HTML-konformen Text umwandeln
1014
18
Verteilte Programmierung mit R M I und SOAP
18.1
18.1.1
18.1.2
18.1.3
18.1.4
Entfernte Methoden 1017
Wie entfernte Methoden arbeiten 1017
Stellvertreter (Proxy) 1017
Wie die Stellvertreter die Daten übertragen
Probleme mit entfernten Methoden 1019
18.2
Nutzen von RMI bei Middleware-Lösungen
18.3
18.3.1
18.3.2
18.3.3
Die Lösung für Java ist RMI 1021
Entfernte Objekte programmieren 1021
Entfernte und lokale Objekte im Vergleich
RMI und CORBA 1022
18.4
Definition einer entfernten Schnittstelle
18.5
18.5.1
18.5.2
18.5.3
18.5.4
Das entfernte Objekt 1023
Der Bauplan für entfernte Objekte 1024
Der Konstruktor 1024
Implementierung der entfernten Methoden 1026
UnicastRemoteObjekt, RemoteServer und RemoteObject
18.6
18.6.1
Stellvertreterobjekte erzeugen 1028
Das Dienstprogramm rmic 1028
18.7
18.7.1
Der Namensdienst (Registry)
Der Port 1030
18.8
18.8.1
Der Server: entfernte Objekte beim Namensdienst anmelden
Automatisches Anmelden bei Bedarf 1031
18.9
Einen Client programmieren
18.9.1
Einfaches Logging
18.10
Aufräumen mit dem DGC
18.11
18.11.1
Entfernte Objekte übergeben und laden
Klassen vom RMI-Klassenlader nachladen
18.11.2
Sicherheitsmanager
18.12
Registry wird vom Server gestartet
18.13
18.13.1
RMI über die Firewall 1037
RMI über HTTP getunnelt 1037
18.14
18.14.1
Daily Soap 1037
SOAP-Implementierung der Apache-Gruppe
1017
1018
1020
1021
1022
1026
1029
1030
1032
1033
1033
1033
1034
1034
1036
1039
Inhalt
25
18.14.2
18.14.3
Einen Client mit der Apache-Bibliothek implementieren
Der Seifen-Server 1041
18.15
Java-API für XML Messaging (JAXM)
1039
1041
18.16
Java Message Service (JMS) 1042
18.16.1 OpenJMS 1043
18.16.2 Beispiel mit Konsument und Produzent im
Publish-Subscribe-Modell 1043
26
Inhalt
19
Applets, Midlets und Sound
19.1
Applets und Applikationen - wer darf was?
19.2
Das erste Hallo-Applet
19.3
Die Zyklen eines Applets
1045
1045
1045
1047
19.4
Parameter an das Applet übergeben
19.4.1
19.4.2
19.4.3
Wie das Applet den Browserinhalt ändern kann
Den Ursprung des Applets erfragen 1048
Was ein Applet alles darf 1050
1047
19.5
Fehler in Applets finden
19.6
19.6.1
19.6.2
19.6.3
Browserabhängiges Verhalten 1050
Java im Browser aktiviert? 1050
Läuft das Applet unter Netscape oder Microsoft Explorer? 1051
Datenaustausch zwischen Applets und Java-Skripten 1052
19.7
Datenaustausch zwischen Applets
19.8
19.8.1
19.8.2
19.8.3
Musik in einem Applet und in Applikationen 1055
Fest verdrahtete Musikdatei in einem Applet 1056
Variable Musikdatei über einen Parameter 1056
WAV- und MIDI-Dateien abspielen 1057
19.9
Webstart
19.10
19.10.1
19.10.2
Java 2 Micro Edition 1058
Konfigurationen 1058
Profile 1059
20
Datenbankmanagement mit JDBC
1047
1050
1052
1058
1063
20.1
Das relationale Modell
20.1.1
Relationale und objektorientierte Datenbanken
1063
20.2
JDBC: der Zugriff auf Datenbanken über Java
20.3
20.3.1
20.3.2
Die Rolle von SQL 1065
Ein Rundgang durch SQL-Anfragen 1065
Datenabfrage mit der Data Query Language (DQL)
20.4
Datenbanktreiber für den Zugriff
1068
1064
1064
___
1066
20.5
20.5.1
20.5.2
20.5.3
20.5.4
20.5.5
20.5.6
20.5.7
20.5.8
20.5.9
Datenbanken und ihre Treiber 1070
Datenbank Interbasejjnd Firebird 1070
InterbaseJDBC-Treiber 1071
Die freie Datenbank MySQL 1072
JDBC-Treiber für MySQL 1074
Die Datenbank Microsoft Access 1074
Ein Typ 4-Treiber für den Microsoft SQL Server 2000 1074
Die JDBC-ODBC Bridge 1074
ODBC einrichten und Access damit verwenden 1075
Oracle8i Enterprise Edition 1076
20.6
Eine Beispiel-Abfrage
20.7
20.7.1
20.7.2
20.7.3
20.7.4
20.7.5
20.7.6
Mit Java ah eine Datenbank andocken
Der Treibermanager 1078
Eine Aufzählung aller Treiber 1078
Log-Informationen 1079
Den Treiber laden 1080
Wie Treiber programmiert sind 1081
Verbindung zur Datenbank 1084
20.8
20.8.1
20.8.2
20.8.3
Datenbankabfragen 1087
Abfragen über das Statement-Objekt
Ergebnisse einer Abfrage in ResultSet
wasNullO bei ResultSet 1089
20.9
Java und SQL-Datentypen
20.9.1
Die getXXXO-Methoden 1090
20.10
Transaktionen
20.11
20.11.1
Elemente einer Datenbank hinzufügen und aktualisieren
Batch-Updates 1093
20.12
20.12.1
20.12.2
Vorbereitete Anweisungen (Prepared Statements) 1094
PreparedStatement-Objekte vorbereiten 1095
Werte für die Platzhalter eines PreparedStatement 1096
1077
1078
1087
1088
1089
1092
1092
20.13
Metadaten 1096
20.13.1 Metadaten über die Tabelle 1096
20.13.2
Informationen über die Datenbank
1100
20.14
Die Ausnahmen bei JDBC
20.15
Java Data Objects (J DO) 1102
21
Reflection
21.1
Einfach mal reinschauen
21.2
21.2.1
21.2.2
21.2.3
Mit dem Class-Objekt etwas über Klassen erfahren
An ein Class-Objekt kommen 1105
Was das Class-Objekt beschreibt 1107
Der Name der Klasse 1109
1101
1105
1105
1105
Inhalt
27
28
Inhalt
21.2.4
21.2.5
21.2.6
21.2.7
21.2.8
21.2.9
Oberklassen finden 1111
Implementierte Interfaces einer Klasse oder eines Inferfaces
Modifizierer und die Klasse Modifier 1112
Die Attribute einer Klasse 1114
Methoden einer Klasse erfragen 1117
Konstruktoren einer Klasse 1120
21.3
Objekte manipulieren
21.3.1
Objekte erzeugen 1122
21.3.2
21.3.3
21.3.4
Die Belegung der Variablen erfragen
Variablen setzen 1126
Private Attribute ändern 1127
21.4
21.4.1
21.4.2
Methoden aufrufen 1128
Statische Methoden aufrufen 1129
Dynamische Methodenaufrufe bei festen Methoden
beschleunigen 1130
21.5
21.5.1
Informationen und Identifizierung von Paketen
Geladene Pakete 1133
22
Komponenten durch Bohnen
22.1
22.1.1
22.1.2
22.1.3
Grundlagen der Komponententechnik 1135
Brauchen wir überhaupt Komponenten? 1135
Visuelle und nicht visuelle Komponenten 1136
Andere Komponententechnologien oder:
Was uns Microsoft brachte 1136
22.2
22.2.1
22.2.2
22.2.3
Das Java-Beans Development Kit (BDK) 1137
Eine Beispielsitzung im BDK 1138
Verknüpfungen zwischen Komponenten 1139
Beans speichern 1140
22.3
Die kleinste Bohne der Welt 1140
22.4
Jar-Archive für Komponenten
22.5
Worauf JavaBeans basieren
22.6
Eigenschaften
22.6.1
22.6.2
22.6.3
Einfache Eigenschaften 1144
Boolesche Eigenschaften 1144
Indizierte Eigenschaften 1145
22.7
22.7.1
22.7.2
Ereignisse 1146
Multicast und Unicast 1146
Namenskonvention 1147
22.8
22.8.1
22.8.2
22.8.3
Weitere Eigenschaften 1149
Gebundene Eigenschaften 1149
Anwendung von PropertyChange bei AWT-Komponenten
Veto-Eigenschaften. Dagegen! 1152
1112
1122
1124
1132
1135
1141
1142
1143
i
1152
22.9
22.9.1
Bean-Eigenschaften anpassen
Customizer 1154
1153
22.10
Property-Editoren
22.11
Beanlnfo
22.12
Beliebte Fehler
23
Java Native Interface (JNI)
23.1
Java Native Interface und Invocation-API
23.2
23.2.6
Die Schritte zur Einbindung einer C-Funktion in
ein Java-Programm 1158
Schreiben des Java-Codes 1158
Kompilieren des Java-Codes 1158
Erzeugen der Header-Datei 1159
Implementierung der Methode in С 1160
Übersetzen der C-Programme und Erzeugen der dynamischen
Bibliothek 1160
Setzen der Umgebungsvariable 1161
23.3
Erweiterung unseres Programms
23.4
23.4.1
23.4.2
Erweiterte JNI-Eigenschaften
Klassendefinitionen 1162
Zugriff auf Attribute 1163
24
Sicherheitskonzepte
24.1
Der Sandkasten (Sandbox)
24.2
24.2.1
24.2.2
24.2.3
24.2.4
24.2.5
Sicherheitsmanager (Security Manager) 1167
Der Sicherheitsmanager bei Applets 1169
Sicherheitsmanager aktivieren 1171
Wie nutzen die Java-Bibliotheken den Sicherheitsmanager?
Rechte vergeben durch Policy-Dateien 1172
Erstellen von Rechtedateien mit dem grafischen Policy-Tool
23.2.1
23.2.2
23.2.3
23.2.4
23.2.5
1154
1155
1155
1157
1157
1161
1162
1167
1167
24.3
Klassenlader (Class Loader)
24.3.1
Wie heißt die Klasse mit der Methode mainO?
24.4
24.4.1
24.4.2
24.4.3
24.4.4
24.4.5
Digitale Unterschriften 1176
DieMDx-Reihe 1176
Secure Hash Algorithm (SHA) 1177
Mit der Security-API einen Fingerabdruck berechnen
Die Klasse MessageDigest 1178
Unix-Crypt 1181
24.5
Verschlüsseln von Datenströmen
1172
1174
1175
1175
1178
1181
Inhalt
29
25
Dienstprogramme für die Java-Umgebung 1183
25.1
Die Werkzeuge im Überblick
25.2
25.2.1
Der Compiler javac 1183
Der Java-Interpreter Java 1184
25.3
25.3.1
25.3.2
25.3.3
Das Archivformat Jar 1185
Das Dienstprogramm Jar benutzen 1186
Das Manifest 1188
Jar-Archive für Applets und Applikation 1189
25.4
25.4.1
25.4.2
25.4.3
25.4.4
M i t JavaDoc und Doclets dokumentieren 1190
M i t JavaDoc Dokumentationen erstellen 1190
Wie JavaDoc benutzt wird 1191
Eine Dokumentation erstellen 1193
JavaDoc und Doclets 1196
25.5
25.5.1
25.5.2
Dienstprogramme zur Signierung 1196
M i t keytool Schlüssel erzeugen 1196
Signieren mitjarsigner 1197
25.6
Konvertierung von Java Byte Code in ein Windows-Exe mit JET 1198
25.7
Mänteln von Javaklassen in ein Windows-Exe mit JexePack 1198
1183
25.8
Decompiler
25.8.1
25.8.2
25.8.3
Jad, ein schneller Decompiler 1199
SourceAgain 1202
Dekompilieren erschweren 1202
1198
25.9
Obfuscate Programm RetroCuard
1203
25.11
Ant 1204
25.11.1 Bezug und Installation von Ant 1205
25.11.2 Properties 1206
25.11.3 Externe und vordefinierte Properties 1207
25.11.4 Weitere Leistungen 1208
30
Inhalt
26
Style-Guide
1209
26.1
Programmierrichtlinien
1209
26.2
Allgemeine Richtlinien
1209
26.3
26.3.1
26.3.2
Quellcode kommentieren 1210
Bemerkungen über JavaDoc 1212
Cotcha-Schlüsselwörter 1213
26.4
26.4.1
26.4.2
Bezeichnernamen 1214
Ungarische Notation 1214
Vorschlag für die Namensgebung 12^5
26.5
26.5.1
26.5.2
Formatierung 1216
Einrücken von Programmcode - die Vergangenheit
Verbundene Ausdrücke 1217
1216
26.5.3
Kontrollierter Datenfluss
26.5.4
Funktionen
1218
26.6
Ausdrücke
1220
26.7
26.7.1
26.7.2
Anweisungen 1221
Schleifen 1221
Switch, case und Durchfallen
26.8
Reihenfolge der Eigenschaften in Klassen 1224
26.9
26.9.1
Zugriffsrechte und Zugriffsmethoden
Accessors/Zugriffsmethoden 1225
26.10
Verweise
A
Literatur
1227
В
Spenden
1233
С
Die Begleit-CD
Index
1217
1223
1224
1225
1235
1237
Inhalt
31
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement