Java ist auch eine Insel

Java ist auch eine Insel
Christian Ullenboom
Java ist auch eine Insel
Programmieren mit der Java Standard Edition Version 6
Galileo Press
Inhalt
Vorwort
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
39
Der erste Kontakt
Historischer Hintergrund
Eigenschaften von Java
1.3.1
Bytecode und die virtuelle Maschine
1.3.2
Objektorientierung in Java
1.3.3
Java-Security-Modell
1.3.4
Zeiger und Referenzen
1.3.5
Bring den Müll raus, Garbage-Collector!
1.3.6
Ausnahmebehandlung
1.3.7
Kein Präprozessor für Textersetzungen
1.3.8
Keine überladenen Operatoren
1.3.9
Java als Sprache, Laufzeitumgebung und Bibliothek
1.3.10 Wofür sich Java nicht eignet
1.3.11 Java im Vergleich zu anderen Sprachen
Die Rolle von Java im Web
1.4.1
Vollwertige Applikationen statt Applets
Die Java Platform Standard Edition (Java SE)
1.5.1
JDK und JRE
1.5.2
Java-Versionen
1.5.3
Java für die Kleinen
1.5.4
Java für die Großen
1.5.5
Installationsanleitung für Java SE
Das erste Programm compilieren und testen
1.6.1
Ein Quadratzahlen-Programm
1.6.2
Der Compilerlauf
1.6.3
Die Laufzeitumgebung
1.6.4
Häufige Compiler-und Interpreterprobleme
Entwicklungsumgebungen im Allgemeinen
1.7.1
Java Studio und NetBeans von Sun
1.7.2
Die Entwicklungsumgebung Eclipse
1.7.3
Together
1.7.4
Ein Wort zu Microsoft, Java und zu J++
Eclipse im Speziellen
1.8.1
Eclipse starten
1.8.2
Das erste Projekt anlegen
1.8.3
Eine Klasse hinzufügen
53
53
55
55
56
57
57
58
58
59
60
60
61
62
62
63
63
63
64
65
65
66
67
67
68
70
70
71
71
71
72
72
73
74
75
77
5
Inhalt
1.9
2.1
2.2
2.3
2.4
6
1.8.4
Übersetzen und Ausführen
78
1.8.5
JDK statt JRE
78
1.8.6
Start eines Programms ohne Speicheraufforderung
79
1.8.7
Projekt einfügen oder Workspace für die Aufgaben wechseln ....
79
1.8.8
Plugins für Eclipse
80
1.8.9
Eclipse W e b Tools Platform (WTP)
81
Zum Weiterlesen
81
Elemente der Programmiersprache Java
83
2.1.1
Textkodierung durch Unicode-Zeichen
83
2.1.2
Literale
86
2.1.3
Bezeichner
86
2.1.4
Reservierte Schlüsselwörter
87
2.1.5
Token
88
2.1.6
Kommentare
89
Anweisungen und Programme
90
2.2.1
Eine Klasse bildet den Rahmen
91
2.2.2
Die Reise beginnt am mainO
92
2.2.3
Programme übersetzen und starten
93
2.2.4
Funktionsaufrufe als Ausdrücke und Anweisungen
93
2.2.5
Modifizierer
96
2.2.6
Anweisungen und Blöcke
96
Datentypen
97
2.3.1
Primitive Datentypen im Überblick
2.3.2
Wahrheitswerte
100
98
2.3.3
Variablendeklarationen
100
2.3.4
Ganzzahlige Datentypen
104
2.3.5
Die Fließkommazahlen float und double
107
2.3.6
Alphanumerische Zeichen
108
2.3.7
Die Typanpassung (das Casting)
109
Ausdrücke, Operanden und Operatoren
113
2.4.1
Zuweisungsoperator
114
2.4.2
Arithmetische Operatoren
115
2.4.3
Unäres M i n u s und Plus
117
2.4.4
Zuweisung mit Operation
118
2.4.5
Präfix-oder Postfix-Inkrement u n d - D e k r e m e n t
119
2.4.6
Die relationalen Operatoren und die Gleichheitsoperatoren
120
2.4.7
Logische Operatoren U n d , Oder, Xor, Nicht
121
2.4.8
Rang der Operatoren in der Auswertungsreihenfolge
122
2.4.9
Überladenes Plus für Strings
124
2.4.10
Was C(++)-Programmierer vermissen könnten
125
Inhalt
2.5
2.6
2.7
2.8
Bedingte Anweisungen oder Fallunterscheidungen
126
2.5.1
Die if-Anweisung
126
2.5.2
Die Alternative m i t einer if/else-Anweisung wählen
128
2.5.3
Die switch-Anweisung bietet die Alternative
130
Schleifen
133
2.6.1
Diewhile-Schleife
133
2.6.2
Schleifenbedingungen und Vergleiche m i t ==
134
2.6.3
Die do/while-Schleife
136
2.6.4
Die for-Schleife
137
2.6.5
Ausbruch planen mit break und Wiedereinstieg mit continue ....
142
2.6.6
break und continue m i t Sprungmarken
144
M e t h o d e n einer Klasse
145
2.7.1
Bestandteil einer Funktion
146
2.7.2
Beschreibungen in der Java-API
146
2.7.3
A u f r u f einer M e t h o d e
148
2.7.4
M e t h o d e n ohne Parameter
148
2.7.5
Statische Funktionen (Klassenmethoden)
149
2.7.6
Parameter, A r g u m e n t und Wertübergabe
150
2.7.7
M e t h o d e n vorzeitig mit return beenden
151
2.7.8
Nicht erreichbarer Quellcode bei Funktionen
152
2.7.9
Rückgabewerte
152
2.7.10
M e t h o d e n überladen
156
2.7.11
Vorgegebener W e r t für nicht aufgeführte Argumente
158
2.7.12
Finale lokale Variablen
158
2.7.13
Rekursive Funktionen
160
2.7.14
Die Türme von Hanoi
163
Weitere Operatoren
165
2.8.1
Operationen auf Bit-Ebene
165
2.8.2
Die Verschiebeoperatoren
167
2.8.3
Ein Bit setzen, löschen, umdrehen und testen
170
2.8.4
Bit-Funktionen der I n t e g e r - u n d Long-Klasse
170
2.8.5
Der Bedingungsoperator
171
2.9
Einfache Benutzereingaben
173
2.10
Zum Weiterlesen
174
3.1
Objektorientierte Programmierung
175
3.1.1
W a r u m überhaupt OOP?
175
3.1.2
Wiederverwertbarkeit
176
3.2
Eigenschaften einer Klasse
177
3.2.1
177
Die Klasse Point
7
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
Die UAAL (Unified Modeling Language)
3.3.1
Hintergrund und Geschichte zur UML
3.3.2
Wichtige Diagrammtypen der UML
Anlegen und Nutzen eines Punktes
3.4.1
Deklarieren von Referenz-Variablen
3.4.2
Anlegen eines Exemplars einer Klasse mit dem new-Operator ....
3.4.3
Zugriff auf Variablen und Methoden mit dem ».«
3.4.4
Konstruktoren nutzen
Import und Pakete
Die API-Dokumentation
Mit Referenzen arbeiten
3.7.1
Die null-Referenz
3.7.2
Zuweisungen bei Referenzen
3.7.3
Funktionen mit nicht-primitiven Parametern
Identität und Gleichheit
3.8.1
Identität von Objekten
3.8.2
Gleichheit und die Methode equalsO
Arrays
3.9.1
Deklaration von Arrays
3.9.2
Arrays mit Inhalt
3.9.3
Die Länge eines Arrays über das Attribut length
3.9.4
Zugriff auf die Elemente über den Index
3.9.5
Array-Objekte erzeugen
3.9.6
Fehler bei Arrays
3.9.7
Arrays mit nicht-primitiven Elementen
3.9.8
Vorinitialisierte Arrays
3.9.9
Die erweiterte for-Schleife
3.9.10
Mehrdimensionale Arrays
3.9.11
Die Wahrheit über die Array-Initialisierung
3.9.12
Mehrere Rückgabewerte
3.9.13
Methode mit variabler Argumentanzahl (Vararg)
3.9.14
Klonen kann sich lohnen-Arrays vermehren
3.9.15
Feldinhalte kopieren
3.9.16
Die Klasse Arrays zum Vergleichen, Füllen und Suchen
178
178
179
180
180
180
181
184
184
185
186
186
188
188
190
190
191
193
193
194
195
195
196
197
198
199
199
201
203
204
204
205
206
207
Der Einstiegspunkt für das Laufzeitsystem main()
3.10.1
Kommandozeilen-Argumente verarbeiten
3.10.2
Der Rückgabewert von main() und System.exitO
3.10.3
Parser der Kommandozeilenargumente-Apache CLI
Eigene Pakete schnüren
3.11.1
Die package-Anweisung
3.11.2
Importieren von Klassen mit import
3.11.3
Paketnamen
213
213
214
214
216
216
216
217
Inhalt
3.12
3.11.4
Hierarchische Strukturen und das Default-Package
217
3.11.5
Klassen mit gleichen Namen in unterschiedlichen Paketen
218
3.11.6
Statisches I m p o r t
218
3.11.7
Eine Verzeichnisstruktur für eigene Projekte
219
Zum Weiterlesen
220
4.1
Einzelne Zeichen mit der Character-Klasse behandeln
221
4.2
Strings und deren A n w e n d u n g
222
4.2.1
String-Literale als String-Objekte für konstante Zeichenketten ...
224
4.3
4.4
4.5
4.6
4.7
4.8
4.2.2
String-Länge und Test auf Leerstring
226
4.2.3
Nach enthaltenen Zeichen und Zeichenfolgen suchen
226
4.2.4
Gut, dass w i r verglichen haben
227
4.2.5
String-Teile extrahieren
229
4.2.6
Strings anhängen, GroßVKIeinschreibung und Leerraum
231
4.2.7
Suchen und ersetzen
233
4.2.8
String-Objekte mit Konstruktoren neu anlegen
235
Konvertieren zwischen Primitiven und Strings
237
4.3.1
Unterschiedliche Typen in Zeichenketten konvertieren
237
4.3.2
String in primitives Element konvertieren
238
Veränderbare Zeichenketten m i t StringBuffer/StringBuilder
239
4.4.1
Anlegen von StringBuffer/StringBuilder-Objekten
239
4.4.2
Länge eines StringBuffer/-Builder-Objekts lesen und setzen
240
4.4.3
Daten anhängen
241
4.4.4
Zeichen(folgen) setzen, erfragen, löschen und umdrehen
241
4.4.5
Vergleichen von String/StringBuffer/StringBuilder
242
4.4.6
hashCodeO bei StringBuffer/StringBuilder
244
Sprachabhängiges Vergleichen mit der Collator-Klasse
244
4.5.1
Die Klasse Collator
244
4.5.2
Effiziente interne Speicherung für die Sortierung
247
Reguläre Ausdrücke
248
4.6.1
Die Klassen Pattern und M a t c h e r
248
4.6.2
M i t MatchResult alle Ergebnisse einsammeln
250
Zerlegen von Zeichenketten
252
4.7.1
Splitten von Zeichenketten mit split()
252
4.7.2
splitO in Pattern
253
4.7.3
Die Klasse Scanner
254
4.7.4
StringTokenizer
258
4.7.5
Breaklterator als Zeichen-, W o r t - , Zeilen- und Satztrenner
260
Zeichenkodierungen und Base64
263
4.8.1
Über die Klasse String Kodierungen vornehmen
263
4.8.2
Konvertieren m i t OutputStreamWriter-Klassen
264
9
Inhalt
4.9
4.10
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
6.1
10
4.8.3
Das Paket java.nio.charset
4.8.4
Base64-Kodierung
Formatieren von Ausgaben
4.9.1
Formatieren mit formatO aus String
4.9.2
Die Format-Klassen im Überblick
4.9.3
Zahlen, Prozente und Währungen mit NumberFormat
und DecimalFormat formatieren
4.9.4
Ausgaben mit MessageFormat formatieren
Zum Weiterlesen
264
265
266
266
269
270
272
274
Arithmetik in Java
5.1.1
Mantisse und Exponent
5.1.2
Spezialwerte Unendlich, Null, NaN
Wertebereich eines Typs und Überlaufkontrolle
5.2.1
Behandlung des Überlaufs
Die Eigenschaften der Klasse Math
5.3.1
Attribute
5.3.2
Winkelfunktionen
5.3.3
Runden von Werten
5.3.4
Wurzel und Exponentialfunktionen
5.3.5
Der Logarithmus
5.3.6
Rest der ganzzahligen Division
5.3.7
Absolutwerte und Maximum/Minimum
5.3.8
Zufallszahlen
5.3.9
Der Nächste, bitte
Mathe bitte strikt
5.4.1
Strikt Fließkomma mit strictfp
5.4.2
Die Klassen Math und StrictMath
Die Random-Klasse
Große Zahlen
5.6.1
Die Klasse Biginteger
5.6.2
Funktionen von Biginteger
5.6.3
Ganz lange Fakultäten
5.6.4
Große Fließkommazahlen mit BigDecimal
5.6.5
Mit MathContext komfortabel die Rechengenauigkeit setzen
Rechnen mit Einheiten. Java Units Specification
Zum Weiterlesen
275
275
276
278
278
280
281
281
282
284
284
285
286
286
287
287
287
287
288
290
290
292
294
295
296
297
299
Eigene Klassen deklarieren
6.1.1
Methodenaufrufe und Nebeneffekte
301
304
Inhalt
6.1.2
6.2
6.3
6.4
6.5
6.6
6.7
Argumentübergabe mit Referenzen
304
6.1.3
Die this-Referenz
305
6.1.4
Überdeckte Objektvariablen nutzen
306
Privatsphäre und Sichtbarkeit
307
6.2.1
Wieso nicht freie Methoden und Variablen für alle?
309
6.2.2
Privat ist nicht ganz privat: Es kommt darauf an, wer's sieht
309
6.2.3
Zugriffsmethoden für Attribute deklarieren
310
Statische Methoden und statische Attribute
313
6.3.1
Warum statische Eigenschaften sinnvoll sind
314
6.3.2
Statische Eigenschaften mit static
314
6.3.3
Statische Eigenschaften über Referenzen nutzen?
315
6.3.4
Warum die Groß-und Kleinschreibung wichtig ist
315
6.3.5
Statische Eigenschaften und Objekteigenschaften
316
6.3.6
Statische Variablen zum Datenaustausch
317
6.3.7
Statische Blöcke als Klasseninitialisierer
318
Konstanten und Aufzählungen
319
6.4.1
Konstanten über öffentliche statische final-Variablen
319
6.4.2
Eincompilierte Belegungen der Klassenvariablen
320
6.4.3
Typsicherere Konstanten
321
6.4.4
Aufzählungen mit enum
323
6.4.5
enum-Konstanten in switch
324
6.4.6
Enum-Objekte in der Weitergabe
324
6.4.7
Statische Imports von Aufzählungen
325
Objekte anlegen und zerstören
325
6.5.1
Konstruktoren schreiben
325
6.5.2
Konstruktor nimmt ein Objekt vom Typ der eigenen Klasse
(Copy-Konstruktor)
328
6.5.3
Einen anderen Konstruktor dergleichen Klasse aufrufen
329
6.5.4
Initialisierung der Objekt-und Klassenvariablen
332
6.5.5
Finale Werte im Konstruktor und in statischen Blöcken setzen ... 334
6.5.6
Exemplarinitialisierer (Instanzinitialisierer)
335
6.5.7
Ihr fehlt uns nicht - der Garbage-Collector
337
6.5.8
Implizit erzeugte String-Objekte
338
6.5.9
Private Konstruktoren, Utility-Klassen, Singleton, Fabriken
339
Assoziationen zwischen Objekten
341
6.6.1
Gegenseitige Abhängigkeiten von Klassen
342
Vererbung
342
6.7.1
Vererbung in Java
343
6.7.2
Einfach- und Mehrfachvererbung
343
6.7.3
Gebäude modelliert
344
6.7.4
Konstruktoren in der Vererbung
345
6.7.5
Sichtbarkeit protected
347
11
6.8
6.9
6.10
6.11
6.12
6.7.6
Das Substitutionsprinzip
348
6.7.7
Automatische und explizite Typanpassung
349
6.7.8
Typen mit dem binären Operator instanceof testen
350
6.7.9
Array-Typen und Kovarianz
351
6.7.10
Methoden überschreiben
352
6.7.11
Mit super eine Methode der Oberklasse aufrufen
354
6.7.12
Kovariante Rückgabetypen
356
6.7.13
Finale Klassen
356
6.7.14
Nicht überschreibbare Funktionen
357
6.7.15
Zusammenfassung zur Sichtbarkeit
357
6.7.16
Sichtbarkeit in der UML
358
6.7.17
Zusammenfassung: Konstruktoren und Methoden
359
Die Oberklasse gibt Funktionalität vor
360
6.8.1
Spätes dynamisches Binden als Beispiel für Polymorphie
362
6.8.2
Unpolymorph bei privaten, statischen und finalen Methoden .... 363
6.8.3
Polymorphie bei Konstruktoraufrufen
365
Abstrakte Klassen und abstrakte Methoden
367
6.9.1
Abstrakte Klassen
367
6.9.2
Abstrakte Methoden
368
Schnittstellen
370
6.10.1
Ein Polymorphie-Beispiel mit Schnittstellen
374
6.10.2
Die Mehrfachvererbung bei Schnittstellen
375
6.10.3
Erweitern von Interfaces-Subinterfaces
378
6.10.4
Vererbte Konstanten bei Schnittstellen
378
6.10.5
Schnittstellenmethoden, die nicht implementiert werden
müssen
380
6.10.6
Abstrakte Klassen und Schnittstellen im Vergleich
381
6.10.7
CharSequence als Beispiel einer Schnittstelle
381
6.10.8
Die Schnittstelle Iterable
383
Object ist die Mutter aller Oberklassen
386
6.11.1
Klassenobjekte
386
6.11.2
Objektidentifikation mit toStringO
386
6.11.3
Objektgleichheit mit equalsO und Identität
388
6.11.4
Klonen eines Objekts mit cloneO
392
6.11.5
Hashcodes über hashCodeO liefern
395
6.11.6
Aufräumen mit finalizeO
397
6.11.7
Synchronisation
398
Innere Klassen
399
6.12.1
Statische innere Klassen und Schnittstellen
399
6.12.2
Mitglieds-oder Elementklassen
400
6.12.3
Lokale Klassen
403
6.12.4
Anonyme innere Klassen
404
6.12.5
this und Vererbung
407
Inhalt
6.13
6.14
6.15
7.1
7.2
7.3
6.12.6
Implementierung einer verketteten Liste
6.12.7
Funktionszeiger
Generische Datentypen
6.13.1
Einfache Klassenschablonen
6.13.2
Einfache Methodenschablonen
6.13.3
Umsetzen der Generics, Typlöschung und Raw-Types
6.13.4
Einschränken der Typen
6.13.5
Generics und Vererbung, Invarianz
6.13.6
Wildcards
Die Spezial-Oberklasse Enum
6.14.1
Methoden auf Enum-Objekten
6.14.2
enum mit eigenen Konstruktoren und Methoden
Dokumentationskommentare mit JavaDoc
6.15.1
Einen Dokumentationskommentar setzen
6.15.2
Mit javadoc eine Dokumentation erstellen
6.15.3
HTML-Tags in Dokumentationskommentaren
408
410
412
413
414
415
416
418
418
419
420
422
424
425
426
426
6.15.4
Generierte Dateien
427
6.15.5
6.15.6
6.15.7
Dokumentationskommentare im Überblick
JavaDoc und Doclets
Veraltete (deprecated) Klassen, Konstruktoren und
Methoden
428
428
429
Problembereiche einzäunen
7.1.1
Exceptions in Java mit try und catch
7.1.2
Eine Datei mit RandomAccessFile auslesen
7.1.3
Ablauf einer Ausnahmesituation
7.1.4
Wiederholung abgebrochener Bereiche
7.1.5
throws im Methodenkopf angeben
7.1.6
Abschlussbehandlung mit finally
7.1.7
Nicht erreichbare catch-Klauseln
Die Klassenhierarchie der Fehler
7.2.1
Die Exception-Hierarchie
7.2.2
Oberausnahmen auffangen
7.2.3
Alles geht als Exception durch
7.2.4
RuntimeException muss nicht aufgefangen werden
7.2.5
Harte Fehler: Error
Auslösen eigener Exceptions
7.3.1
M i t throw Ausnahmen auslösen
7.3.2
Neue Exception-Klassen deklarieren
7.3.3
Abfangen und Weiterleiten
7.3.4
Geschachtelte Ausnahmen
433
433
434
435
436
437
440
443
443
444
445
446
447
448
449
449
450
452
453
13
Inhalt
7.4
7.5
7.6
8.1
8.2
8.3
8.4
8.5
8.6
14
Rückgabewerte bei ausgelösten Ausnahmen
454
Der Stack Trace
455
7.5.1
Stack Trace aus Throwable
455
7.5.2
Stack Trace aus Thread
456
Assertions
457
7.6.1
457
Assertions in Java
7.6.2
Assertions in eigenen Programmen nutzen
457
7.6.3
Assertions aktivieren
458
Die Java-Klassenphilosophie
459
8.1.1
459
Übersicht über die Pakete der Standardbibliothek
Wrapper-Klassen
465
8.2.1
Die Basisklasse N u m b e r f ü r numerische Wrapper-Objekte
467
8.2.2
Die Klasse Integer
468
8.2.3
Unterschiedliche Ausgabeformate
470
8.2.4
A u t o b o x i n g : Boxing und Unboxing
470
8.2.5
Die Boolean-Klasse
473
8.2.6
Die Klassen Double und Float für Fließkommazahlen
475
Die Utility-Klasse System und Properties
475
8.3.1
Systemeigenschaften der Java-Umgebung
476
8.3.2
line.Separator
477
8.3.3
Browser-Version abfragen
478
8.3.4
Property von der Konsole aus setzen
478
8.3.5
Umgebungsvariablen des Betriebssystems
479
8.3.6
Einfache Zeitmessung und Profiling
480
Benutzereinstellungen
483
8.4.1
483
Benutzereinstellungen in Registry oder X M L - D o k u m e n t e n
8.4.2
Einträge einfügen, auslesen und löschen
484
8.4.3
Auslesen der Daten und Schreiben in anderem Format
486
8.4.4
A u f Ereignisse horchen
487
Klassenlader (Class Loader)
487
8.5.1
W o h e r die kleinen Klassen k o m m e n
487
8.5.2
Setzen des Klassenpfades
488
8.5.3
Die wichtigsten drei Typen von Klassenladern
489
8.5.4
Derjava.lang.ClassLoader
490
8.5.5
Hot Deployment mit dem URL-ClassLoader
491
8.5.6
Dasjre/lib/endorsed-Verzeichnis
494
8.5.7
getContextClassLoaderO v o m Thread
494
8.5.8
W i e heißt die Klasse mit der M e t h o d e main()?
495
Design-Pattern und das Beobachten von Änderungen
496
8.6.1
497
Design-Pattern
Inhalt
8.6.2
8.7
8.8
9.1
9.2
9.3
501
501
ProcessBuilder und Prozesskontrolle m i t Process
8.7.2
Die Windows-Registry verwenden
504
8.7.3
Einen Browser/E-Mail-Client/Editor aufrufen
505
8.7.4
Ausführen von Skripten
506
8.7.5
Programme mit der Compiler-API übersetzen
508
Annotationen
510
Annotationstypen fjpOverride, @Deprecated,
@SuppressWarnings
510
8.8.2
Common Annotations
512
8.8.3
A n n o t a t i o n e n für Web-Services
512
8.8.4
A n n o t a t i o n e n für X M L - M a p p i n g
512
Zum Weiterlesen
512
Nebenläufigkeit
515
9.1.1
Threads und Prozesse
515
9.1.2
W i e parallele Programme die Geschwindigkeit steigern
können
516
Threads erzeugen
518
9.2.1
Threads über die Schnittstelle Runnable implementieren
518
9.2.2
Thread mit Runnable starten
519
9.2.3
Der Name eines Threads
521
9.2.4
Die Klasse Thread erweitern
521
9.2.5
W e r bin ich?
524
Der Ausführer (Executor) k o m m t
524
9.3.1
Die Schnittstelle Executor
524
9.3.2
Die Thread-Pools
526
9.3.3
Threads mit Rückgabe über Callable
527
9.3.4
M e h r e r e Callable abarbeiten
529
9.3.5
M i t ScheduledExecutorService wiederholende Ausgaben
und Zeitsteuerungen
9.4
497
8.7.1
8.8.1
8.9
Das Beobachter-Pattern (Observer/Observable)
Ausführen externer Programme, Compiler und Skripten
530
Die Zustände eines Threads
530
9.4.1
Threads schlafen
531
9.4.2
Das Ende eines Threads
532
9.4.3
UncaughtExceptionHandler für unbehandelte Ausnahmen
533
9.4.4
Einen Thread höflich mit Interrupt beenden
534
9.4.5
Der stop() von außen und die Rettung m i t ThreadDeath
536
9.4.6
Ein Rendezvous mit join()
537
9.4.7
Barrier und Austausch m i t Exchanger
539
9.4.8
M i t yield() auf Rechenzeit verzichten
540
15
9.5
9.6
9.7
9.8
9.9
9.10
9.11
9.12
9.4.9
Arbeit niederlegen und wieder aufnehmen
9.4.10
Priorität
9.4.11
Der Thread ist ein Dämon
Synchronisation über kritische Abschnitte
9.5.1
Gemeinsam genutzte Daten
9.5.2
Probleme beim gemeinsamen Zugriff und kritische Abschnitte ...
9.5.3
Punkte parallel initialisieren
9.5.4
i++sieht atomar aus, ist es aber nicht
9.5.5
Kritische Abschnitte schützen
9.5.6
Schützen mit ReentrantLock
9.5.7
Synchronisieren mit synchronized
9.5.8
Synchronized-Methoden der Klasse StringBuffer
9.5.9
Mit synchronized synchronisierte Blöcke
9.5.10
Dann machen wir doch gleich alles synchronisiert
9.5.11
Lock-Freigabe im Fall von Exceptions
9.5.12
Mit synchronized nachträglich synchronisieren
9.5.13
Monitore sind reentrant - gut für die Geschwindigkeit
9.5.14
Synchronisierte Methodenaufrufe zusammenfassen
9.5.15
Deadlocks
9.5.16
Erkennen von Deadlocks
Synchronisation über Warten und Benachrichtigen
9.6.1
Die Schnittstelle Condition
9.6.2
Beispiel Erzeuger-Verbraucher-Programm
9.6.3
Warten mit wait() und Aufwecken mit notifyO
9.6.4
Falls der Lock fehlt: HlegalMonitorStateException
9.6.5
Semaphore
Atomare Operationen und frische Werte mit volatile
9.7.1
Der Modifizierer volatile bei Objekt-/Klassenvariablen
9.7.2
Das Paket java.util.concurrent.atomic
Mit dem Thread verbundene Variablen
9.8.1
ThreadLocal
9.8.2
InheritableThreadLocal
Gruppen von Threads in einer Thread-Gruppe
9.9.1
Aktive Threads in der Umgebung
9.9.2
Etwas über die aktuelle Thread-Gruppe herausfinden
9.9.3
Threads in einer Thread-Gruppe anlegen
9.9.4
Methoden von Thread und ThreadGroup im Vergleich
Zeitgesteuerte Abläufe
9.10.1
Die Klassen Timer und TimerTask
9.10.2
Job-Scheduler Quartz
Einen Abbruch der virtuellen Maschine erkennen
Zum Weiterlesen
540
540
542
544
544
544
545
547
548
549
553
554
555
556
557
558
559
560
561
562
563
564
567
571
573
574
577
577
578
579
580
581
583
583
584
586
588
590
590
591
592
593
Inhalt
10.1
Weltzeit
595
10.2
10.3
Wichtige Datum-Klassen im Überblick
Sprachen der Länder
10.3.1
Sprachen und Regionen über Locale-Objekte
Übersetzung durch ResourceBundle-Objekte
10.4.1
Ressource-Dateien
10.4.2
Die Klasse ResourceBundle
10.4.3
Ladestrategie für ResourceBundle-Objekte
Zeitzonen
10.5.1
Zeitzonen durch die Klasse TimeZone repräsentieren
Die Klasse Date
10.6.1
Objekte erzeugen und Methoden nutzen
Calendarund CregorianCalendar
10.7.1
Die abstrakte Klasse Calendar
10.7.2
Der gregorianische Kalender
596
596
597
600
600
601
602
603
604
605
605
607
607
608
10.4
10.5
10.6
10.7
10.7.3
10.8
10.9
11.1
11.2
11.3
Ostertage
611
10.7.4 Abfragen und Setzen von Datumselementen
Formatieren der Datumsangaben
10.8.1
Mit DateFormat und SimpleDateFormat formatieren
10.8.2
Parsen von Datumswerten
10.8.3
Parsen und Formatieren ab bestimmten Positionen
Zum Weiterlesen
612
617
617
623
624
625
Datenstrukturen und die Collection-API
11.1.1
Die Schnittstelle Collection
11.1.2
Das erste Programm mit Container-Klassen
11.1.3
Die Schnittstelle Iterable und das erweiterte for
11.1.4 Generische Datentypen in der Collection-API
11.1.5
Generischer Typ bei Iterable und konkreter Typ beim
erweiterten for
11.1.6
Schnittstellen, die Collection erweitern, und Map
11.1.7
Konkrete Container-Klassen
Mit einem Iterator durch die Daten wandern
11.2.1
Die Schnittstellen Enumeration und Iterator
11.2.2
Der typisierte Iterator
Listen
11.3.1 ArrayList oder LinkedList? Speicherung im Feld oder in einer
verketteten Liste
11.3.2
Die Schnittstelle List
627
628
629
630
631
632
632
634
634
634
636
638
638
639
V
11.3.3
11.3.4
11.3.5
11.3.6
11.3.7
11.3.8
Listlterator
Beispiel mit List-Methoden
ArrayList
LinkedList
Arrays.asListO und die »echten« Listen
toArrayO von Collection verstehen - die Gefahr einer Falle
erkennen
11.4 Vergleichen von Objekten
11.4.1
Die Schnittstellen Comparator und Comparable
11.4.2
Algorithmen mit Such-und Sortiermöglichkeiten
11.4.3
Den größten und kleinsten Wert einer Collection finden
11.4.4 Sortieren
11.5 Mengen (Sets)
11.5.1
HashSet
11.5.2
TreeSet- die Menge durch Bäume
11.5.3
LinkedHashSet
11.6 Stack (Kellerspeicher, Stapel)
11.6.1
Die Methoden von Stack
11.6.2
Ein Stack ist ein Vector-aha!
11.7 Queues (Schlangen)
11.7.1
Blockierende Queues und Prioritätswarteschlangen
11.8 Assoziative Speicher HashMap und TreeMap
11.8.1
Ein Objekt der Klasse HashMap erzeugen
11.8.2
Einfügen und Abfragen der Datenstruktur
11.8.3
Die Bedeutung von equals(), hashCodeO und
IdentityHashMap
11.8.4
Elemente im Assoziativspeicher müssen unveränderbar
bleiben
11.8.5
Aufzählen der Elemente
11.8.6
Der Gleichheitstest, Hash-Wert und Klon einer Hash-Tabelle
11.8.7
Die Arbeitsweise einer Hash-Tabelle
11.9
Die Properties-Klasse
11.9.1
Properties setzen und lesen
11.9.2
Properties verketten
11.9.3
Eigenschaften ausgeben
11.9.4
Hierarchische Eigenschaften
11.9.5
Properties speichern
11.9.6
Über die Beziehung zwischen den Klassen Properties und
Hashtable
11.10 Algorithmen in Collections
11.10.1 Datenmanipulation: Umdrehen, Füllen, Kopieren
11.10.2 Mit der Halbierungssuche nach Elementen fahnden
641
642
645
647
649
649
652
652
654
655
657
659
662
662
664
664
665
665
666
667
668
668
669
671
672
672
674
675
677
677
677
678
679
679
681
681
682
683
Inhalt
11.10.3 Nicht-änderbare Datenstrukturen
11.10.4 Häufigkeit eines Elements
11.10.5 nCopiesO
11.10.6 Singletons
11.11 Synchronisation der Datenstrukturen
11.11.1 Lock-Free-Algorithmen aus java.util.concurrent
11.11.2 Wrapper zur Synchronisation
11.11.3 CopyOnWriteArrayList und CopyOnWriteArraySet
11.12 Die abstrakten Basisklassen für Container
11.12.1 Optionale Methoden
11.13 Die Klasse BitSetfür Bitmengen
11.13.1 Ein BitSet anlegen, füllen und erfragen
11.13.2 Mengenorientierte Operationen
11.13.3 Funktionsübersicht
11.13.4 Primzahlen in einem BitSet verwalten
12.1
12.2
12.3
684
684
684
685
686
686
686
687
687
688
689
689
690
691
692
Datei und Verzeichnis
694
12.1.1
Dateien und Verzeichnisse mit der Klasse File
694
12.1.2
Verzeichnis oder Datei? Existiert es?
696
12.1.3
Verzeichnis-und Dateieigenschaften/-attribute
697
12.1.4 Wurzelverzeichnis, Laufwerksnamen, Plattenspeicher
699
12.1.5
Umbenennen und Verzeichnisse anlegen
701
12.1.6
Verzeichnisse listen und Dateien filtern
702
12.1.7
Dateien berühren, neue Dateien anlegen, temporäre Dateien .... 704
12.1.8
Dateien und Verzeichnisse löschen
706
12.1.9 Verzeichnisse nach Dateien rekursiv durchsuchen
707
12.1.10 URL-und URI-Objekte aus einem File-Objekt ableiten
708
12.1.11 M i t Locking Dateien sperren
12.1.12 Sicherheitsprüfung
12.1.13 Mime-Typen mit dem JavaBeans Activation Framework (JAF) ....
12.1.14 Zugriff auf SMB-Server mit jCIFS
Dateien mit wahlfreiem Zugriff
12.2.1
Ein RandomAccessFile zum Lesen und Schreiben öffnen
12.2.2
Aus dem RandomAccessFile lesen
12.2.3
Schreiben mit RandomAccessFile
12.2.4
Die Länge des RandomAccessFile
12.2.5
Hin und her in der Datei
12.2.6
Wahlfreier Zugriff und Pufferung mit Unified I/O
Stream-Klassen und Reader/Writer am Beispiel von Dateien
12.3.1 Mit dem FileWriter Texte in Dateien schreiben
12.3.2
Zeichen mit der Klasse FileReader lesen
709
709
709
710
711
712
712
714
715
715
716
717
718
719
19
12.4
12.5
12.6
12.7
12.8
12.9
12.3.3
Kopieren mit FileOutputStream und FilelnputStream
12.3.4
Das FileDescriptor-Objekt
Basisklassen für die Ein-/Ausgabe
12.4.1
Die abstrakten Basisklassen
12.4.2
Übersicht über Ein-/Ausgabeklassen
12.4.3
Die abstrakte Basisklasse OutputStream
12.4.4
Die Schnittstellen Closeable und Flushable
12.4.5
Ein Datenschlucker
12.4.6
Die abstrakte Basisklasse InputStream
12.4.7
Ressourcen wie Grafiken aus dem Klassenpfad und aus
Jar-Archiven laden
12.4.8
Ströme mit SequencelnputStream zusammensetzen
12.4.9
Die abstrakte Basisklasse Writer
12.4.10 Die Schnittstelle Appendable
12.4.11 Die abstrakte Basisklasse Reader
Formatierte Textausgaben
12.5.1
Die Klassen PrintWriter und PrintStream
12.5.2
System.out, System.err und System.in
12.5.3
Geschützte Passwort-Eingaben mit der Klasse Console
Schreiben und Lesen aus Strings und Byte-Feldern
12.6.1
Mit dem StringWriter ein String-Objekt füllen
12.6.2
CharArrayWriter
12.6.3
StringReader und CharArrayReader
12.6.4 Mit ByteArrayOutputStream in ein Byte-Feld schreiben
12.6.5
Mit ByteArraylnputStream aus einem Byte-Feld lesen
Datenströme filtern und verketten
12.7.1 Writer als Filter verketten
12.7.2
Gepufferte Unicode-Ausgabe mit BufferedWriter
12.7.3
Gepufferte Unicode-Eingabe mit BufferedReader
12.7.4
LineNumberReader zählt automatisch Zeilen mit
12.7.5
Daten mit der Klasse PushbackReader zurücklegen
12.7.6
DataOutputStream/DatalnputStream
12.7.7
Basisklassen für Filter
12.7.8
Die Basisklasse FilterWriter
12.7.9
Ein LowerCaseWriter
12.7.10 Eingaben mit der Klasse FilterReader filtern
Vermittler zwischen Byte-Streams und Unicode-Strömen
12.8.1
Datenkonvertierung durch den OutputStreamWriter
12.8.2
Automatische Konvertierungen mit dem InputStreamReader
Kommunikation zwischen Threads mit Pipes
12.9.1
PipedOutputStream und PipedlnputStream
12.9.2
PipedWriter und PipedReader
720
723
724
724
724
725
727
728
728
729
730
732
733
734
736
736
740
743
743
744
744
745
746
747
747
748
748
750
752
752
755
755
756
757
758
759
759
760
761
762
763
Inhalt
12.10
Datenkompression
12.10.1
12.11
12.12
Zusammenpacken
766
12.10.2
Datenströme komprimieren
766
12.10.3
Zip-Archive
770
12.10.4 Jar-Archive
777
Prüfsummen
777
12.11.1
Die Schnittstelle Checksum
777
12.11.2
Die Klasse CRC32
778
12.11.3
Die Adler32-Klasse
780
Persistente Objekte und Serialisierung
780
12.12.1
Objekte mit der Standard-Serialisierung speichern
781
12.12.2
Objekte über die Standard-Serialisierung lesen
784
785
12.12.3
Die Schnittstelle Serializable
12.12.4
Nicht serialisierbare A t t r i b u t e aussparen
786
12.12.5
Das Abspeichern selbst in die Hand nehmen
788
12.12.6
Tiefe Objektkopien
790
12.12.7
Versionenverwaltung und die SUID
792
12.12.8
W i e die ArrayList serialisiert
794
12.12.9
Probleme m i t der Serialisierung
12.12.10Serialisieren in X M L - D a t e i e n
12.13
13.1
13.2
13.3
765
Java-Unterstützung beim Komprimieren und
795
795
12.12.11 JavaBeans Persistence
796
12.12.12 XStream
798
Tokenizer
798
12.13.1
StreamTokenizer
798
12.13.2
CSV-(Comma Separated Values-)Dateien verarbeiten
801
Auszeichnungssprachen
803
13.1.1
Die Standard Generaiized M a r k u p Language (SGML)
803
13.1.2
Extensible M a r k u p Language (XML)
804
Eigenschaften von X M L - D o k u m e n t e n
804
13.2.1
804
Elemente und A t t r i b u t e
13.2.2
Beschreibungssprache für den Aufbau von X M L - D o k u m e n t e n ...
806
13.2.3
Schema - eine Alternative zu DTD
809
13.2.4
Namensraum (Namespace)
811
13.2.5
XML-Applikationen
Die Java-APIs für X M L
813
813
13.3.1
Das Document Object M o d e l ( D O M )
814
13.3.2
Simple API f o r X M L Parsing (SAX)
814
13.3.3
Pull-API StAX
814
13.3.4
Java Document Object M o d e l (JDOM)
814
21
Inhalt
13.4
13.5
13.6
13.3.5 JAXP als Java-Schnittstelle zu XML
13.3.6
DOM-Bäume einlesen mit JAXP
Serielle Verarbeitung mit StAX
13.4.1
Unterschiede der Verarbeitungsmodelle
13.4.2
XML-Dateien mit dem Cursor-Verfahren lesen
13.4.3
XML-Dateien mit dem Iterator-Verfahren verarbeiten
13.4.4
Mit Filtern arbeiten
13.4.5
XML-Dokumente schreiben
Serielle Verarbeitung von XML mit SAX
13.5.1
Schnittstellen von SAX
13.5.2
SAX-Parser erzeugen
13.5.3
Die wichtigsten Methoden der Schnittstelle ContentHandler
13.5.4
ErrorHandler und EntityResolver
XML-Dateien mit JDOM verarbeiten
13.6.1 JDOM beziehen
13.6.2
Paketübersicht
13.6.3
Die Document-Klasse
13.6.4
Eingaben aus der Datei lesen
13.6.5
Das Dokument im XML-Format ausgeben
13.6.6
Der Dokumenttyp
13.6.7
Elemente
13.6.8
Zugriff auf Elementinhalte
13.6.9
Liste mit Unterelementen erzeugen
13.6.10 Neue Elemente einfügen und ändern
13.6.11 Attributinhalte lesen und ändern
815
815
816
816
818
820
821
822
824
825
826
826
828
829
829
830
831
832
833
833
834
836
838
839
841
13.6.12 XPath
844
13.7
Transformationen mitXSLT
13.7.1 Templates und XPath als Kernelemente von XSLT
13.7.2
Umwandlung von XML-Dateien mit JDOM und JAXP
13.8 Java Architecture for XML Binding (JAXB)
13.9
HTML-Dokumente einlesen
13.10 Zum Weiterlesen
847
847
849
850
852
853
14.1
855
855
857
857
858
859
859
860
14.2
22
Das Abstract-Window-Toolkit und Swing
14.1.1 Java Foundation Classes
14.1.2 Was Swing vom AWT unterscheidet
14.1.3
Peer-Klassen und Lightweight-Komponenten
14.1.4
Die Klasse Toolkit
Fenster unter grafischen Oberflächen
14.2.1
Swing-Fenster darstellen
14.2.2
Fenster schließbar machen - setDefaultCloseOperationO
Inhalt
14.3
14.4
14.5
14.6
14.7
14.8
14.2.3
AWT-Fenster darstellen
861
14.2.4
Sichtbarkeit des Fensters
861
14.2.5
Größe und Position des Fensters verändern
862
14.2.6
Unterklassen der Fenster-Klassen bilden
863
14.2.7
Fenster- und Dialog-Dekoration
864
14.2.8
Dynamisches Layout während einer Größenänderung
864
Beschriftungen über die Klasse JLabel
864
14.3.1
868
Mehrzelliger Text, HTML in der Darstellung
Es t u t sich was - Ereignisse beim A W T
868
14.4.1
Die Klasse AWTEvent
868
14.4.2
Events auf verschiedenen Ebenen
869
14.4.3
Ereignisquellen und Horcher (Listener)
871
14.4.4
Listener implementieren
872
14.4.5
Listener bei dem Ereignisauslöser anmelden/abmelden
874
14.4.6
Aufrufen der Listener im AWT-Event-Thread
875
14.4.7
Adapterklassen nutzen
875
14.4.8
Innere Mitgliedsklassen und innere anonyme Klassen
877
14.4.9
Generic Listener
878
Schaltfläche
879
14.5.1
DerJButton
879
14.5.2
Der aufmerksame ActionListener
880
14.5.3
AbstractButton
882
14.5.4
JToggleButton
885
Icon und Imagelcon für Bilder auf Swing-Komponenten
885
14.6.1
Die Schnittstelle Icon
887
14.6.2
Was Icon und Image verbindet
888
JComponent und Component als Basis aller K o m p o n e n t e n
889
14.7.1
Ereignisse jeder K o m p o n e n t e
889
14.7.2
Die Größe eine Komponente
892
14.7.3
Die Position der Komponente
892
14.7.4
Properties
893
14.7.5
Fokus
893
14.7.6
Komponenten-Ereignisse
894
14.7.7
Hinzufügen von Komponenten
896
14.7.8
Zeichnen von K o m p o n e n t e n und die Undurchsichtigkeit
896
14.7.9
Tooltips
897
14.7.10
Rahmen (Border)
898
14.8.1
JPanel
901
14.8.2
JScrollPane
901
Container
900
14.8.3
JTabbedPane
902
14.8.4
JSplitPane
903
• 23
14.9
Alles Auslegungssache: die Layoutmanager
14.9.1
Übersicht über Layoutmanager
14.9.2
Zuweisen eines Layoutmanagers
14.9.3
Im Fluss mit FlowLayout
14.9.4 Mit BorderLayout in allen Himmelsrichtungen
14.9.5
Rasteranordnung mit GridLayout
14.9.6
Der GridBagLayout-Manager
904
904
905
906
908
910
912
14.9.7
14.9.8
14.9.9
916
917
918
Null-Layout
BoxLayout
Weitere Layoutmanager
14.10 Rollbalken und Slider
14.10.1 Der Schieberegler JSIider
14.10.2 Der Rollbalken JScrollBar
14.11 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen
14.11.1 Kontrollfelder (JCheckBox)
14.11.2 Ereignisse über ItemListener
14.11.3 Sich gegenseitig ausschließende Optionen (JRadioButton)
14.12 Der Fortschrittsbalken JProgressBar
14.13 Menüs und Symbolleisten
14.13.1 Die Menüleisten und die Einträge
14.13.2 Menüeinträge definieren
14.13.3 Einträge durch Action-Objekte beschreiben
14.13.4 Mnemonics und Shortcuts (Accelerator)
14.13.5 Symbolleisten alias Toolbars
14.13.6 Popup-Menüs
14.13.7 System-Tray nutzen
14.14 Das Konzept des Model-View-Controllers
14.15 Auswahlmenüs, Listen und Spinner
14.15.1 Das Auswahlmenü JComboBox
14.15.2 Zuordnung einerTaste mit einem Eintrag
14.15.3 Datumsauswahl
14.15.4 Die JList
14.15.5 JSpinner
14.16 Texteingabefelder
14.16.1 Text in einer Eingabezeile
14.16.2 Die Oberklasse der JText-Komponenten: JTextComponent
14.16.3 JPasswordField
14.16.4 Validierende Eingabefelder
14.16.5 Mehrzellige Textfelder
14.16.6 Die Editor-Klasse JEditorPane
14.17 Bäume mit JTree-Objekten
14.17.1 Selektionen bemerken
918
918
920
924
924
926
928
930
932
932
934
935
937
939
941
945
946
948
948
951
952
953
956
957
958
959
960
960
961
964
966
968
Inhalt
14.18
Tabellen mitJTable
969
14.18.1
Ein eigenes Tabellen-Model
970
14.18.2
AbstractTableModel
971
14.18.3
DefaultTableModel
974
14.18.4
Ein eigener Renderer für Tabellen
975
14.18.5
Zeil-Editoren
979
14.18.6
Größe und U m r a n d u n g der Zellen
980
14.18.7
Spalteninformationen
980
14.18.8
Tabellenkopf von Swing-Tabellen
981
14.18.9
Selektionen einer Tabelle
982
14.18.11 Ein professionelles Tabellenlayout m i t JGrid
983
14.19 JRootPane, JLayeredPane und JDesktopPane
14.20
14.21
14.22
14.23
981
14.18.10 Automatisches Sortieren und Filtern mit RowSorter
983
14.19.1
JRootPane
984
14.19.2
JLayeredPane
984
14.19.3
JDesktopPane und die Kinder JlnternalFrame
Dialoge und W i n d o w - O b j e k t e
984
986
14.20.1
J W i n d o w u n d JDialog
987
14.20.2
M o d a l oder nicht-modal
987
14.20.3
Standarddialoge mit JOptionPane
987
14.20.4
Der Farbauswahldialog JColorChooser
989
14.20.5
Der Dateiauswahldialog
991
Flexibles Java-Look & Feel
995
14.21.1
L&F global setzten
995
14.21.2
UlManager
995
14.21.3
Verbessern des Aussehens unter W i n d o w s mit JGoodies
Looks
997
14.21.4
Swing-Beschriftungen eine andere Sprache geben
997
Die Zwischenablage (Clipboard)
998
14.22.1
Clipboard-Objekte
998
14.22.2
A u f den Inhalt zugreifen mit Transferable
999
14.22.3
DataFlavor ist das Format der Daten in der Zwischenablage
1000
14.22.4
Einfügungen in der Zwischenablage erkennen
1002
14.22.5
Drag & Drop
1002
Undo durchführen
1 4 . 2 4 A W T , Swing und die Threads
1003
1005
14.24.1
Swing ist nicht thread-sicher
14.24.2
Swing-Elemente mit invokeLaterO und invokeAndWaitO
1006
bedienen
1008
14.24.3
SwingWorker
1009
14.24.4
Eigene Ereignisse in die Queue setzen
1011
14.24.5
Auf alle Ereignisse hören
1012
25
Inhalt
14.25
Selbst definierte Cursor
1012
14.26
Benutzerinteraktionen automatisieren
1014
14.27
14.26.1
Automatisch in die Tasten hauen
1014
14.26.2
Mausoperationen
1015
14.26.3
M e t h o d e n zur Zeitsteuerung
1016
14.26.4
Screenshots
1016
14.26.5
Funktionsweise und Beschränkungen
1017
14.26.6
M o u s e l n f o und Pointerlnfo
Zeitliches Ausführen mit dem javax.swing.Timer
14.28 Alternativen zu A W T und Swing
1018
14.28.1
XML-Beschreibungen der Oberfläche: Swixml, XUIVLuxor
1018
14.28.2
SWT
1019
14.29
Zum Weiterlesen
1019
15.1
Grundlegendes zum Zeichnen
1021
15.1.1
Die p a i n t O - M e t h o d e f ü r d a s AWT-Frame
1021
15.1.2
Zeichen von Inhalten mit JFrame
1023
15.1.3
Auffordern zum Neuzeichnen mit repaintO
1024
15.1.4
Grundbegriffe: Koordinaten, Punkte, Pixel
1024
15.2
15.3
15.4
15.5
26
1017
1017
15.1.5
Die ereignisorientierte Programmierung ändert Fensterinhalte ... 1025
15.1.6
Java2D-API
Einfache Zeichenfunktionen
1026
1027
15.2.1
Linien
1027
15.2.2
Rechtecke
1028
15.2.3
Ovale und Kreisbögen
1028
15.2.4
Polygone und Polylines
1029
Zeichenketten schreiben und Fonts
1032
15.3.1
1032
Zeichenfolgen schreiben
15.3.2
Die Font-Klasse
1032
15.3.3
Einen neuen Font aus einem gegebenen Font ableiten
1034
15.3.4
Zeichensätze des Systems ermitteln
1035
15.3.5
Neue TrueType-Fonts in Java nutzen
1036
15.3.6
Font-Metadaten durch FontMetrics
1036
Geometrische Objekte
1039
15.4.1
1041
Die Schnittstelle Shape
15.4.2
Kreisförmiges
1042
15.4.3
Kurviges
1042
15.4.4
Area und die konstruktive Flächengeometrie
1042
15.4.5
Pfade
1043
Farben und die Paint-Schnittstelle, Linientypen
1046
15.5.1
1046
Zufällige Farbblöcke zeichnen
Inhalt
15.5.2
15.5.3
15.5.4
15.5.5
15.6
Farben mit der Klasse Color
Die Farben des Systems über SystemColor
Composite und Xor
Dicke und Art der Linien von Formen bestimmen
1048
1051
1054
1055
Eine Übersicht über die Bilder-Bibliotheken
Bilder mit ImagelO lesen
Ein Bild zeichnen
Programm-Icon/Fenster-Icon setzen
Splash-Screen
Bilder im Speicher erzeugen
Kein Flackern durch Double-Buffering
Bilder skalieren
Schreiben mit ImagelO
Java Image Management Interface (JIMI)
Pixel für Pixel auslesen und schreiben
Asynchrones Laden mit getImageO und dem MediaTracker
1059
1060
1062
1065
1065
1066
1067
1069
1070
1074
1074
1076
Bilder
15.6.1
15.6.2
15.6.3
15.6.4
15.6.5
15.6.6
15.6.7
15.6.8
15.6.9
15.6.10
15.6.11
15.6.12
1058
15.6.13 Volatilelmage
15.7
15.8
15.9
15.10
1077
Clipping-Operationen
Zeichenhinweise durch RenderingHints
Transformationen mit einem AffineTransform-Objekt
Drucken
15.10.1 Drucken mit dem einfachen Ansatz
15.10.2 Ein Prinüob
15.10.3 Drucken der Inhalte
15.10.4 Komponenten drucken
15.10.5 Den Druckeram Parallelport ansprechen
15.10.6 Bekannte Drucker
15.11 Grafikverarbeitung ohne grafische Oberfläche
15.11.1 Xvfb-Server
15.11.2 Pure Java AWT Toolkit (PJA)
15.12 Zum Weiterlesen
1078
1081
1082
1084
1084
1085
1086
1088
1089
1090
1090
1091
1091
1091
16.1
1093
1094
1094
16.2
Grundlegende Begriffe
16.1.1
Internet-Standards und RFC
URI und URL
16.2.1
URI
1094
16.2.2
16.2.3
16.2.4
16.2.5
Die Klasse URL
Informationen über eine URL
Der Zugriff auf die Daten über die Klasse URL
Verbindungen durch einen Proxy-Server
1095
1097
1099
1101
27
16.3
16.4
16.5
Die Klasse URLConnection
1101
16.3.1
M e t h o d e n und A n w e n d u n g von URLConnection
1102
16.3.2
Protokoll- und Content-Handler
1104
16.3.3
Im Detail: v o m URL zu URLConnection
1105
16.3.4
Der Protokoll-Handler für Jar-Dateien
1106
16.3.5
Verbindungen und Proxy-Authentifizierung mit Basic
Authentication
1107
M i t GET und POST Daten übergen
1109
16.4.1
Kodieren der Parameter für Serverprogramme
1109
16.4.2
Eine Suchmaschine ansprechen
1111
Host- und IP-Adressen
1111
16.5.1
Lebt der Rechner?
1113
16.5.2
Das Netz ist Klasse
1114
16.5.3
IP-Adresse des lokalen Hosts
1114
16.6
Networkinterface
1115
16.7
M i t dem Socket zum Server
1116
16.7.1
Das Netzwerk ist der Computer
1116
16.8
16.9
16.10
16.11
16.7.2
Sockets
1117
16.7.3
Eine V e r b i n d u n g zum Server aufbauen
1117
16.7.4
Server unter Spannung: die Ströme
1118
16.7.5
Die V e r b i n d u n g wieder abbauen
1119
16.7.6
Informationen über den Socket
1119
16.7.7
Reine Verbindungsdaten über SocketAddress
1121
Client/Server-Kommunikation
1122
16.8.1
W a r t e n auf Verbindungen
1122
16.8.2
Ein Multiplikationsserver
1123
16.8.3
Blockierendes Lesen
1126
16.8.4
Von außen erreichbar sein
1127
Apache Jakarta Commons HttpClient und Net
1128
16.9.1
Jakarta Commons HttpClient
1128
16.9.2
Jakarta Commons Net
1129
Arbeitsweise eines Webservers
1129
16.10.1
Das Hypertext Transfer Protocol (HTTP)
1129
16.10.2
Anfragen an den Server
1130
16.10.3
Die A n t w o r t e n v o m Server
1133
16.10.4
Webserver mit com.sun.net.httpserver.HttpServer
1136
Datagram-Sockets
1137
16.11.1
Die Klasse DatagramSocket
1139
1140
16.11.2
Datagramme und die Klasse Datagram Packet
16.11.3
Auf ein hereinkommendes Paket warten
1141
16.11.4
Ein Paket zum Senden vorbereiten
1142
16.11.5
M e t h o d e n der Klasse Datagram Packet
1143
16.11.6
Das Paketsenden
1144
Inhalt
16.12
16.13
16.14
17.1
17.2
E-Mail
1145
16.12.1
W i e eine E-Mail um die W e l t geht
1145
16.12.2
Das Simple M a i l Transfer Protocol und RFC 822
1145
16.12.3
POP (Post Office Protocol)
1146
16.12.4
DieJavaMail API
1146
16.12.5
E-Mails versenden
1147
16.12.6
M i m e M u l t i p a r t - N a c h r i c h t e n schicken
1148
16.12.7
E-Mails mittels P0P3 abrufen
1149
16.12.8
Ereignisse und Suchen
Tiefer liegende Netzwerkeigenschaften
16.13.1
Internet Control Message Protocol (ICMP)
1151
16.13.2
MAC-Adresse
1152
Zum Weiterlesen
1153
Dynamisch generierte Webseiten
1155
17.1.1
Was sind Servlets?
1156
17.1.2
Was sind JavaServer Pages?
1156
Servlets und JSPs mit Tomcat entwickeln
1157
17.2.1
Servlet-Container
1157
17.2.2
Entwicklung der Servlet/JSP-Spezifikationen
1158
1158
17.2.3
Webserver mit Servlet-Funktionalität
17.2.4
Tomcat
1159
17.2.5
Ablageort für eigene JSP-Seiten
1159
17.2.6
Webapplikationen
1160
17.2.7
Z u o r d n u n g von Webapplikationen zu physikalischen
Verzeichnissen
17.2.8
17.3
1150
1151
M i t dem WTP ein W e b - P r o j e k t entwickeln
JSP-Konstrukte
1161
1161
1163
17.3.1
Scriptlets
1164
17.3.2
Ausdrücke
1164
17.3.3
Deklarationen
1165
17.3.4
Kommentare
1165
17.3.5
Quoting
1166
17.3.6
Entsprechende XML-Tags
1166
17.4
Implizite Objekte
1166
17.5
Formulardaten
1167
17.6
A u f Beans zurückgreifen
1169
17.6.1
Die Bean-Klasse
1169
17.6.2
Beans in JSP-Seiten anlegen
1170
17.6.3
A t t r i b u t e setzen und erfragen
1170
17.6.4
Der schnelle Zugriff auf Parameter
1171
29
17.7
17.8
17.9
M i t HttpServletRequest an die geschickten Browser-Daten
1171
17.7.1
Verarbeiten der Header
1172
17.7.2
Hilfsfunktion im Umgang mit Headern
1172
17.7.3
Übersicht der Browser-Header
1173
Das HttpServletResponse-Objekt
1174
17.8.1
Automatisches Neuladen
1174
17.8.2
Seiten umlenken
JSP-Direktiven
17.9.1
page-Direktiven im Überblick
1176
17.9.2
Die include-Direktive
1177
17.9.3
MitJSPs Bilder generieren
1178
17.10.1
Die A k t i o n include
1179
17.10.2
Die A k t i o n forward
1179
17.10.3
Die A k t i o n plugin
1179
17.10 A k t i o n e n
17.11
17.12
17.13
17.14
17.16
17.17
1179
Kleine Kekse: die Klasse Cookies
1180
17.11.1
Cookies erzeugen und setzen
1181
17.11.2
Cookies v o m Servlet einlesen
1182
17.11.3
Cookie-Status ändern
1183
17.11.4
Langlebige Cookies
1184
Sitzungsverfolgung (Session Tracking)
1184
17.12.1
Das mit einer Sitzung verbundene Objekt HttpSession
1185
17.12.2
W e r t e mit einer Sitzung assoziieren und auslesen
1185
17.12.3
URL-Rewriting
1186
17.12.4
Zusätzliche Informationen
1187
JSTL und weitere Tag-Libraries
1189
17.13.1
Standard Tag Library (JSTL)
1189
17.13.2
JakartaTaglibs Project
Servlets
17.14.1
17.15
1174
1175
1191
1191
Servlets compilieren
1192
17.14.2
Die Servlets in das classes-Verzeichnis bringen
1192
17.14.3
Servlet-Mapping
1193
Der Lebenszyklus eines Servlets
1195
17.15.1
Abfragen bei serviceO
1196
17.15.2
Mehrere Anfragen beim Servlet und die Thread-Sicherheit
1197
17.15.3
Das Ende eines Servlets
1197
Das HttpServletResponse-Objekt
1197
17.16.1
W i r generieren eine Webseite
1197
17.16.2
Binärdaten senden
1199
17.16.3
Noch mehr über Header, die der Server setzt
1200
Objekte und Dateien per POST verschicken
1201
17.17.1
1202
Datei-Upload
Inhalt
17.18 Servlets und Sessions
17.19 Weiterleiten und Einbinden von Servlet-Inhalten
17.20 Inter-Servlet-Kommunikation
17.20.1 Daten zwischen Servlets teilen
17.21 Internationalisierung
17.21.1 Die Länderkennung des Anfragers auslesen
17.21.2 Länderkennung für die Ausgabe setzen
17.21.3 Westeuropäische Texte senden
17.22 Tomcat: Spezielles
17.22.1 Tomcat als Service unter Windows NT ausführen
17.23 Zum Weiterlesen
1203
1204
1205
1205
1205
1206
1206
1206
1208
1208
1208
18.1
Entfernte Objekte und Methoden
1211
18.1.1 Stellvertreter helfen bei entfernten Methodenaufrufen
18.1.2
Standards für entfernte Objekte
Java Remote Method Invocation
18.2.1
Zusammenspiel von Server, Registry und Client
18.2.2
Wie die Stellvertreter die Daten übertragen
18.2.3
Probleme mit entfernten Methoden
18.2.4
Nutzen von RMI bei Middleware-Lösungen
18.2.5
Zentrale Klassen und Schnittstellen
18.2.6
Entfernte und lokale Objekte im Vergleich
Auf der Serverseite
18.3.1
Entfernte Schnittstelle deklarieren
18.3.2
Remote-Objekt-Implementierung
18.3.3
Stellvertreterobjekte erzeugen
18.3.4
Der Namensdienst (Registry)
18.3.5
Remote-Objekt-Implementierung exportieren und beim
Namensdienst anmelden
18.3.6
Einfaches Logging
18.3.7
Aufräumen mit dem DGC
Auf der Clientseite
Entfernte Objekte übergeben und laden
18.5.1
Klassen vom RMI-Klassenlader nachladen
Der Server startet die Registry selbst
Weitere Eigenschaften von RMI
18.7.1
RMI und CORBA
18.7.2
RMI über HTTP getunnelt
18.7.3
Automatische Remote-Objekt-Aktivierung
Daily Soap
18.8.1 SOAP-Protokoll
1211
1213
1213
1213
1213
1214
1216
1216
1217
1217
1217
1218
1219
1219
18.2
18.3
18.4
18.5
18.6
18.7
18.8
1220
1222
1222
1223
1224
1224
1225
1226
1226
1226
1227
1227
1228
31
Inhalt
Die technische Realisierung
18.8.3
SOAP-Implementierungen
1228
1229
18.8.4
@WebService in Java 6
1229
18.8.5
Einen Web-Service definieren
1229
18.8.6
Web-Services veröffentlichen
1230
18.8.7
Einen JAX-WS-Client implementieren
1231
18.9
Java Message Service (JMS)
1233
18.10
Zum Weiterlesen
1233
19.1
Applets in der Wiege von Java
1235
19.2
19.3
19.1.1
(J)Applet und Applikationen
1235
19.1.2
Das erste Hallo-Applet
1235
19.1.3
Die Zyklen eines Applets
1237
19.1.4
Parameter an das A p p l e t übergeben
1237
19.1.5
W i e das A p p l e t den Browser-Inhalt ändern kann
1239
19.1.6
Den Ursprung des Applets erfragen
1239
19.1.7
Datenaustausch zwischen Applets
1240
19.1.8
Was ein A p p l e t alles darf
1243
Fehler in Applets finden
1244
19.2.1
Ist Java im Browser aktiviert?
1244
19.2.2
Läuft das A p p l e t unter Netscape oder Microsoft Explorer?
1244
19.2.3
Datenaustausch zwischen Applets und JavaScript
1246
Musik in einem A p p l e t und in Applikationen
1246
19.3.1
Die A r b e i t mit AudioCIip
1247
19.3.2
JavaSound API
1247
19.4
Webstart
19.5
J a v a M i c r o Edition
1248
1249
19.5.1
Konfigurationen
1249
19.5.2
Profile
1250
19.6
Zum Weiterlesen
1252
20.1
Das relationale M o d e l l
1253
Datenbanken und Tools
1254
20.2
20.3
32
18.8.2
20.2.1
HSQLDB
1254
20.2.2
Weitere Datenbanken
1255
20.2.3
Eciipse-Plugins zum Durchschauen von Datenbanken
1256
JDBC und Datenbanktreiber
1258
20.3.1
Treibertypen
1259
20.3.2
JDBC-Versionen
1260
Inhalt
20.4
20.5
20.6
Eine Beispielabfrage
1261
20.4.1
Schritte zur Datenbankabfrage
1261
20.4.2
Client für HSQLDB-Datenbank
1262
M i t Java an eine Datenbank andocken
1263
20.5.1
1264
Der Treiber-Manager
20.5.2
Den Treiber laden
1264
20.5.3
Eine Aufzählung aller Treiber
1265
20.5.4
Log-Informationen
1266
20.5.5
V e r b i n d u n g zur Datenbank a u f - u n d abbauen
1267
20.5.6
DataSource
1270
20.5.7
Gepoolte Verbindungen
1273
Datenbankabfragen
1273
20.6.1
Abfragen über das Statement-Objekt
1273
20.6.2
Ergebnisse einer Abfrage in ResultSet
1275
20.6.3
Java und SQL-Datentypen
1276
20.6.4
Unicode in der Spalte korrekt auslesen
1279
20.6.5
wasNullO bei ResultSet
1279
20.6.6
W i e viele Zeilen hat ein ResultSet?
1280
20.7
Die Ausnahmen beiJDBC
1280
20.8
Elemente einer Datenbank hinzufügen und aktualisieren
1281
20.8.1
20.9
20.10
Batch-Updates
1282
ResultSets in Bohnen durch RowSet
1283
20.9.1
Die Schnittstelle RowSet
1283
20.9.2
Implementierungen von RowSet
1284
20.9.3
Der Typ CachedRowSet
1284
20.9.4
Der Typ WebRowSet
1285
Vorbereitete Anweisungen (Prepared Statements)
1287
20.10.1
PreparedStatement-Objekte vorbereiten
1288
20.10.2
W e r t e für die Platzhaltereines PreparedStatement
1289
20.11
Transaktionen
1290
20.12
Die LOBs (Large Objects)
1290
20.12.1
Einen BLOß besorgen
20.13 Metadaten
20.13.1 Metadaten über die Tabelle
20.13.2
20.14
20.15
Informationen über die Datenbank
1291
1291
1291
1294
Einführung in SQL
1295
20.14.1
1296
Ein Rundgang durch SQL-Anfragen
20.14.2
Datenabfrage m i t der Data Query Language (DQL)
1297
20.14.3
Tabellen mit der Data Definition Language (DDL) anlegen
1299
Zum Weiterlesen
1300
33
Inhalt
21.1
21.2
21.3
21.4
Metadaten
1301
21.1.1
M e t a d a t e n durch Java-Doc Tags
1301
21.1.2
XDodet
1302
M e t a d a t e n der Klassen mit dem Class-Objekt
An ein Class-Objekt k o m m e n
1303
21.2.2
Was das Class-Objekt beschreibt
1305
21.2.3
Der Name der Klasse
1306
21.2.4
Die A r b e i t auf dem Feld
1308
21.2.5
instanceof mit Class-Objekten
1309
21.2.6
Oberklassen finden
1310
21.2.7
Implementierte Interfaces einer Klasse oder eines Interfaces
1310
21.2.8
Modifizierer und die Klasse M o d i f i e r
1311
21.2.9
Reflections Gespür für A t t r i b u t e einer Klasse
1313
21.2.10
M e t h o d e n einer Klasse erfragen
1315
21.2.11
Konstruktoren einer Klasse
1319
21.2.12
Annotationen
Objekte manipulieren
21.6
22.1
1321
1321
21.3.1
Objekte erzeugen
1321
21.3.2
Die Belegung der Variablen erfragen
1322
21.3.3
Eine generische toStringO-Funktion
1324
21.3.4
Variablen setzen
1326
21.3.5
Private A t t r i b u t e ändern
1328
M e t h o d e n aufrufen
1328
21.4.1
Statische M e t h o d e n aufrufen
1330
21.4.2
Dynamische Methodenaufrufe bei festen M e t h o d e n
beschleunigen
21.5
1302
21.2.1
1330
Informationen und Identifizierung von Paketen
1332
21.5.1
1332
Geladene Pakete
Annotationen
1332
21.6.1
Neue A n n o t a t i o n e n definieren
1332
21.6.2
A n n o t a t i o n e n mit genau einem Element
1333
21.6.3
Beliebige Schlüssel-Werte-Paare
1334
21.6.4
Vorbelegte Elemente
1337
21.6.5
Annotieren von Annotationstypen
1338
21.6.6
A n n o t a t i o n e n zur Laufzeit ausgelesen
1340
21.6.7
M ö g l i c h e Nachteile von A n n o t a t i o n e n
1342
Grundlagen der Komponententechnik
1345
22.1.1
1345
Brauchen w i r überhaupt Komponenten?
Inhalt
22.2
22.3
22.4
22.5
23.1
22.1.2
Visuelle und nichtvisuelle Komponenten
22.1.3
Komponenten-Technologien von Microsoft
1346
1346
W o r a u f JavaBeans basieren
1347
Eigenschaften
1348
22.3.1
Einfache Eigenschaften
1349
22.3.2
Boolesche Eigenschaften
1349
22.3.3
Indizierte Eigenschaften
1349
Ereignisse
1351
22.4.1
Multicast und Unicast
1351
22.4.2
Namenskonvention
1351
Weitere Eigenschaften
1354
22.5.1
1354
Gebundene Eigenschaften
22.5.2
A n w e n d u n g von PropertyChange bei A W T - K o m p o n e n t e n
1357
22.5.3
Veto-Eigenschaften - dagegen!
1357
Die Logging-API
1359
23.2
Überwachen von Systemzuständen
1361
23.3
MBean-Typen, MBean-Server und weitere Begriffe
1362
23.3.1
1363
MXBeans des Systems
23.4
Geschwätzige Programme und JConsole
23.5
Der MBeanServer
1367
23.6
Eine eigene Standard-MBean
1368
23.7
Zum Weiterlesen
1370
24.1
Zentrale Elemente der Java-Sicherheit
1371
24.1.1
24.2
24.3
24.4
Java Cryptography Architecture und Extension
1365
1371
Der Sandkasten (Sandbox)
1372
Sicherheitsmanager (Security Manager)
1372
24.3.1
Der Sicherheitsmanager bei Applets
1374
24.3.2
Sicherheitsmanager aktivieren
1375
24.3.3
W i e nutzen die Java-Bibliotheken den Sicherheitsmanager?
1376
24.3.4
Rechte durch Policy-Dateien vergeben
1377
24.3.5
Erstellen von Rechte-Dateien m i t dem grafischen Policy-Tool .... 1379
24.3.6
Kritik an den Policies
Signierung
1380
1381
24.4.1
W a r u m signieren?
1381
24.4.2
Digitale Ausweise und die Zertifizierungsstelle
1382
24.4.3
M i t keytool Schlüssel erzeugen
1382
24.4.4
Signieren mitjarsigner
1383
35
Inhalt
24.5
24.6
Digitale Unterschriften
1383
24.5.1
Die M D x - R e i h e
1384
24.5.2
Secure Hash A l g o r i t h m (SHA)
1384
24.5.3
M i t der Security-API einen Fingerabdruck berechnen
1385
24.5.4
Die Klasse MessageDigest
1385
24.5.5
Unix-Crypt
1387
Verschlüsseln von Daten(-strömen)
1387
24.6.1
Den Schlüssel bitte
1388
24.6.2
Verschlüsseln mit Cipher
1389
24.6.3
Verschlüsseln von Datenströmen
1389
24.7
Zum Weiterlesen
1391
25.1
Java Native Interface und Invocation-API
1393
25.2
Einbinden einer C-Funktion in ein Java-Programm
1394
25.2.1
Schreiben des Java-Codes
1394
25.2.2
Compilieren des Java-Programms
1395
25.2.3
Erzeugen der Header-Datei
1395
25.2.4
Implementierung der M e t h o d e in C
1396
25.2.5
Übersetzen der C-Programme und Erzeugen der dynamischen
25.2.6
Suchort der dynamischen Bibliothek
Bibliothek
25.3
25.4
25.5
25.6
Nativ die Stringlänge ermitteln
1399
1399
Erweiterte JNI-Eigenschaften
1400
25.4.1
Klassendefinitionen
1400
25.4.2
Zugriff auf A t t r i b u t e
1401
Einfache A n b i n d u n g von existierenden Bibliotheken
1403
25.5.1
C++ Klassen ansprechen
1403
25.5.2
COM-Schnittstellen anzapfen
1403
Zum Weiterlesen
1403
26.1
Die Werkzeuge im Überblick
1405
26.2
Java-Compiler
1405
26.2.1
Bytecode Compiler javac
1405
26.2.2
Native Compiler
1406
26.2.3
Java-Programme in ein natives ausführbares Programm
einpacken
26.3
36
1397
1407
Der Java-Interpreter Java
1407
26.3.1
1408
DerUnterschiedzwischenjava.exeundjavaw.exe
Inhalt
26.4
26.5
26.6
26.7
26.8
26.9
A
Das Archivformat Jar
26.4.1
Das Dienstprogramm Jar benutzen
26.4.2
Das Manifest
26.4.3
Applikationen in Jar-Archiven starten
26.4.4 Applets in Jar-Archiven
Monitoringprogramme
26.5.1 jps
26.5.2 jstat
26.5.3 jmap
26.5.4 jstack
Ant
26.6.1
Bezug und Installation von Ant
26.6.2
Properties
26.6.3
Externe und vordefinierte Properties
26.6.4 Weitere Ant-Tasks
Decompiler und Obfuscatoren
26.7.1
Der Decompiler Jad
26.7.2
Das Decompilieren erschweren
26.7.3
Das Obfuscator-Programm ProGuard
Sourcecode Beautifier
Zum Weiterlesen
1409
1409
1412
1412
1413
1414
1414
1414
1414
1415
1416
1416
1418
1419
1420
1420
1421
1423
1425
1425
1426
Die Begleit-DVD
1427
Index
1429
37
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