Inhalt

Inhalt
Inhalt
Vorwort
35
Vorwort zur 4. Auflage
46
Vorwort zur 5. Auflage
46
1
Schon wieder eine neue Sprache?
1.1
Dererste Kontakt
51
1.2
Historischer Hintergrund
51
1.3
1.4
1.5
49
Eigenschaften von Java
52
1.3.1
1.3.2
1.3.3
1.3.4
1.3.5
1.3.6
1.3.7
1.3.8
1.3.9
53
54
54
55
56
56
57
57
57
ßytecode und die virtuelle Maschine
Kein Präprozessor für Textersetzungen
Keine überladenen Operatoren
Zeigerund Referenzen
Bring den Müll raus, Carbage-Collector!
Ausnahmenbehandlung
Objektorientierung in Java
Java-Security-Modell
Wofür sich Java nicht eignet
Java im Vergleich zu anderen Sprachen
58
1.4.1
1.4.2
1.4.3
1.4.4
59
59
59
60
Java und JavaScript
Normierungsversuche
Die Rolle von Java im Web
Vollwertige Applikationen statt Applets
Die Java Platform Standard Edition (Java SE)
60
1.5.1
1.5.2
1.5.3
1.5.4
1.5.5
60
61
62
62
62
JDK und JRE
Java-Versionen
Java für die Kleinen
Java für die Großen
Direkt ausführbare Programme, native Compiler
1.6
Entwicklungsumgebungen
1.6.1
Sun ONE Studio und NetBeans von Sun
1.6.2
IBM und Eclipse
1.6.3
Together
1.6.4
Ein Wort zu Microsoft, Java und zu J++
63
63
63
64
65
1.7
Installationsanleitung für Java 2
65
1.7.1
1.7.2
1.7.3
1.7.4
66
66
67
68
DasJavaSE beziehen
Java SE unter Windows installieren
Compiler und Interpreter nutzen
Installation der Laufzeitumgebung (1.4) unter Linux
Inhalt
5
1.8
1.9
Das erste Programm compilieren und testen
1.8.1
Häufige Compiler-und Interpreterprobleme
69
70
71
Eclipse
71
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
1.9.7
1.9.8
1.9.9
Eclipse starten
Das erste Projekt anlegen
Eine Klasse hinzufügen
Übersetzen und Ausführen
JDK statt JRE
Start eines Programms ohne Speicheraufforderung
Projekt einfügen oder Workspace für die Aufgaben wechseln
Allgemeine Plugins für Eclipse
Eclipse Web Tools Platform (WTP)
72
76
77
77
78
79
79
81
2
Sprachbeschreibung
2.1
Anweisungen und Programme
2.2
Elemente der Programmiersprache Java
85
2.2.1
2.2.2
2.2.3
2.2.4
Textkodierung durch Unicode-Zeichen
Literale
Bezeichner
Reservierte Schlüsselwörter
85
2.2.5
Token
90
2.2.6
2.2.7
2 2 8
Semantik
Kommentare
Funktionsaufrufe als Anweisungen
90
2.2.9
2.2.10
Die leere Anweisung
Der Block
87
87
89
94
97
97
97
2.3
Datentypen
2.4
2.3.1
Primitive Datentypen
2.3.2
Wahrheitswerte
2.3.3
Variablendeklarationen
2.3.4
Ganzzahlige Datentypen
2.3.5
Die Fließkommazahlen
2.3.6
Alphanumerische Zeichen
2.3.7
Die Typanpassung (das Casting)
2.3.8
Lokale Variablen, Blöcke und Sichtbarkeit
2.3.9
Initialisierung von lokalen Variablen
Ausdrücke, Operanden und Operatoren
98
10
°
'00
102
'°
4
105
106
111
112
113
114
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
2.4.10
6
Inhalt
Zuweisungsoperator
Verbundoperatoren
Präfix-oder Postfix-Inkrement und-Dekrement
Unäres Minus und Plus
Arithmetische Operatoren
Die relationalen Operatoren
Logische Operatoren
Rang der Operatoren in der Auswertungsreihenfolge
Überladenes Plus für Strings
Was C(++)-Programmierer vermissen könnten
116
118
118
121
121
122
124
1
2 6
2.5
2.6
2.7
2.8
Bedingte Anweisungen oder Fallunterscheidungen
126
2.5.1
2.5.2
2.5.3
128
131
Die if-Anweisung
Die Alternative wählen mit einer if/else-Anweisung
Die switch-Anweisung bietet die Alternative
Schleifen
2.6.1
Die while-Schleife
2.6.2
Schleifenbedingungen und Vergleiche mit ==
2.6.3
Die do/while-Schleife
2.6.4
Die for-Schleife
2.6.5
Ausbruch planen mit break und Wiedereinstieg mit continue
2.6.6
break und continue mit Sprungmarken
126
133
133
134
I36
137
142
144
Methoden einer Klasse
145
2.7.1
2.7.2
2.7.3
2.7.4
2.7.5
2.7.6
2.7.7
2.7.8
2.7.9
2.7.10
2.7.11
2.7.12
2.7.13
2.7.14
I46
I47
148
149
149
151
151
I52
I56
158
I58
160
162
165
Bestandteil einer Funktion
Aufruf einer Methode
Methoden ohne Parameter
Statische Funktionen (Klassenmethoden)
Parameter, Argument und Wertübergabe
Methoden vorzeitig mit return beenden
Nicht erreichbarer Quellcode bei Funktionen
Rückgabewerte
Methoden überladen
Vorgegebener Wert für nicht aufgeführte Argumente
Finale lokale Variablen
Rekursive Funktionen
Die Ackermann-Funktion
Die Türme von Hanoi
Weitere Operatoren
^66
2.8.1
2.8.2
2.8.3
2.8.4
2.8.5
2.8.6
166
167
168
169
172
172
Bitoperationen
Vorzeichenlose Zahlen in ein Integer und Char konvertieren
Variablen mit Xor vertauschen
Die Verschiebeoperatoren
Ein Bit setzen, löschen, umdrehen und testen
Der Bedingungsoperator
I74
2.9
Einfache Benutzereingaben
3
Klassen und Objekte
3.1
Objektorientierte Programmierung
1
3.1.1
3.1.2
I79
180
3.2
3.3
3.4
Warum überhaupt OOP?
Wiederverwertbarkeit
177
7 9
180
Klassen benutzen
3.2.1
Die Klasse Point
181
Die UML (Unified Modeling Language)
181
3.3.1
3.3.2
182
182
Hintergrund und Geschichte zur UML
Wichtige Diagrammtypen der UML
Anlegen und Nutzen eines Punktes
3.4.1
Definieren von Referenz-Variablen
183
183
In
3.4.2
3.4.3
3.4.4
184
184
187
3.5
Import und Pakete
188
3.6
Die API-Dokumentation
188
3.7
Mit Referenzen arbeiten
189
3.7.1
3.7.2
3.7.3
3.7.4
Die null-Referenz
Zuweisungen bei Referenzen
Funktionen mit nichtprimitiven Parametern
Gleichheit von Objekten und die Methode equals()
189
191
192
193
Arrays
3.8.1
3.8.2
3.8.3
3.8.4
3.8.5
3.8.6
3.8.7
3.8.8
3.8.9
3.8.10
3.8.11
3.8.12
3.8.13
3.8.14
3.8.15
3.8.16
3.8.17
Deklaration von Arrays
Arrays mit Inhalt
Die Länge eines Arrays über das Attribut length
Zugriff auf die Elemente über den Index
Array-Objekte erzeugen
Fehler bei Arrays
Arrays mit nicht-primitiven Elementen
Vorinitialisierte Arrays
Die erweiterte for-Schleife
Mehrdimensionale Arrays
Die Wahrheit über die Array-Initialisierung
Mehrere Rückgabewerte
Argument per Referenz übergeben
Arrays klonen
Feldinhalte kopieren
Die Klasse Arrays zum Vergleichen, Füllen und Suchen
Methode mit variabler Argumentanzahl (vararg)
195
196
196
197
198
198
20
°
201
202
202
204
206
207
207
208
208
209
211
3.8
3.9
3.10
8
Anlegen eines Exemplars einer Klasse mit dem new-Operator
Zugriff auf Variablen und Methoden mit dem ».«
Konstruktoren nutzen
Der Einstiegspunkt für das Laufzeitsystem main()
212
3.9.1
3.9.2
3.9.3
212
213
213
Kommandozeilen-Parameter ausgeben
Der Rückgabewert von main() und System.exit()
Parser der Kommandozeilenargumente Apache CLI
Eigene Pakete schnüren
215
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.10.7
215
215
216
216
217
217
218
Die package-Anweisung
Importieren von Klassen mit import
Paketnamen
Hierarchische Strukturen und das Default-Package
Klassen mit gleichen Namen in unterschiedlichen Paketen
Statisches Import
Eine Verzeichnisstruktur für eigene Projekte
4
Der Umgang mit Zeichenketten
4.1
Strings
4.1.1
4.1.2
4.1.3
Inhalt
und deren Anwendung
String-Literale als String-Objekte für konstante Zeichenketten
String-Objekte neu anlegen
String-Länge
219
221
222
222
224
4.1.4
4.1.5
4.1.6
4.1.7
4.1.8
4.2
4.3
Gut, dass wir verglichen haben
String-Teile extrahieren
Suchen und ersetzen
Veränderte Strings liefern
Unterschiedliche Typen in Zeichenketten konvertieren
225
226
229
232
234
Veränderbare Zeichenketten mit StringBuffer/StringBuilder
234
4.2.1
4.2.2
4.2.3
4.2.4
235
236
236
237
Anlegen von StringBuffer/StringBuilder-Objekten
Die Länge eines StringBuffer/Builder-Objekts lesen und setzen
Daten anhängen
Zeichen(folgen) setzen, erfragen, löschen und umdrehen
Vergleiche von Zeichenketten
238
4.3.1
4.3.2
4.3.3
4.3.4
238
239
239
242
equalsO in String und StringBuffer/StringBuilder
equalsO und hashCode() bei StringBuffer/StringBuilder
Sprachabhängiges Vergleichen mit der Collator-Klasse
Effiziente interne Speicherung für die Sortierung
4.4
Reguläre Ausdrücke
4.4.1
Die Klassen Pattern und Matcher
4.4.2
Mit MatchResult alle Ergebnisse einsammeln
4.4.3
Das alternative Paket org.apache.regexp
243
243
244
245
4.5
Zerlegen von Zeichenketten
4.5.1
Splitten von Zeichenketten mit splitO aus Pattern
4.5.2
split() in String
4.5.3
Die Klasse Scanner
4.5.4
StringTokenizer
4.5.5
Der Breaklterator als W o r t - u n d Satztrenner
245
245
246
246
250
252
4.6
Zeichenkodierungen
4.6.1
Kodierungen für unterschiedliche Codepages
4.6.2
Andere Klassen zur Konvertierung und das Paket Java.nio.charset
4.6.3
Base64-Kodierung
254
254
255
256
4.7
Formatieren von Ausgaben
4.7.1
Zahlen, Prozente und Währungen mit NumberFormat formatieren
4.7.2
Dezimalzahlformatierung mit DecimalFormat
4.7.3
Formatieren mit format() aus String
4.7.4
Ausgaben formatieren mit MessageFormat
257
259
259
261
263
5
Mathematisches
5.1
Arithmetik in Java
5.1.1
Java-Sondertypen im Beispiel
269
269
Die Funktionen der Math-Klasse
270
5.2.1
5.2.2
270
5.2
5.2.3
5.2.4
5.2.5
Attribute
Winkelfunktionen-trigonometrische Funktionen
und Arcus-Funktionen
Runden von Werten
Wurzel und Exponentialfunktionen
Der Logarithmus
267
270
271
273
273
Inhalt
9
5.2.6
5.2.7
5.2.8
5.2.9
5.3
274
274
275
275
Mathe bitte strikt
275
5.3.1
Strikt Fließkomma mit strictfp
276
5.3.2
Die Klassen Math und StrictMath
276
5.4
Die Random-Klasse
276
5.5
Große Zahlen
5.5.1
Die Klasse Biginteger
5.5.2
Funktionen von Biginteger
5.5.3
Ganz lange Fakultäten
5.5.4
Große Fließkommazahlen mit BigDecimal
5.5.5
Komfortabel die Rechengenauigkeit setzen mit AAathContext
278
278
280
282
283
284
5.6
Rechnen mit Einheiten: Java Units Specification
286
5.7
Weitere Klassen für mathematische Probleme
287
6
Eigene Klassen schreiben
6.1
6.2
6.3
6.4
6.5
Inhalt
289
Eigene Klassen definieren
291
6.1.1
6.1.2
6.1.3
6.1.4
294
294
295
296
AAethodenaufrufe und Nebeneffekte
Argumentübergabe mit Referenzen
Die this-Referenz
Überdeckte Objektvariablen nutzen
Assoziationen zwischen Objekten
6.2.1
10
Rest der ganzzahligen Division
Absolutwerte und Maximum/Minimum
Zufallszahlen
Der nächste Bitte
Gegenseitige Abhängigkeiten von Klassen
297
298
Privatsphäre und Sichtbarkeit
298
6.3.1
6.3.2
6.3.3
300
300
301
Wieso nicht freie Methoden und Variablen für alle?
Privat ist nicht ganz privat: Es kommt darauf an, wer's sieht
Zugriffsmethoden für Attribute definieren
Statische Methoden und statische Attribute
304
6.4.1
6.4.2
6.4.3
6.4.4
6.4.5
6.4.6
6.4.7
305
305
306
306
307
308
309
Warum statische Eigenschaften sinnvoll sind
Statische Eigenschaften mit static
Statische Eigenschaften über Referenzen nutzen?
Warum die Groß-und Kleinschreibung wichtig ist
Statische Eigenschaften und Objekteigenschaften
Statische Variablen zum Datenaustausch
Statische Blöcke als Klasseninitialisierer
Konstanten und Aufzählungen
310
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
310
311
312
314
314
Konstanten über öffentliche statische final-Variablen
Problem mit finalen Klassenvariablen
Typsicherere Konstanten
Aufzählungen mit enum in Java 5
enum-Konstanten in switch
6.6
6.7
6.8
6.9
6.10
6.11
Objekte anlegen und zerstören
315
6.6.1
6.6.2
6.6.3
6.6.4
6.6.5
6.6.6
6.6.7
6.6.8
316
319
322
324
325
327
328
328
Konstruktoren schreiben
Einen anderen Konstruktor der gleichen Klasse aufrufen
Initialisierung der Objekt- und Klassenvariablen
Finale Werte im Konstruktor und in statischen Blöcken setzen
Exemplarinitialisierer (Instanzinitialisierer)
Zerstörung eines Objekts durch den Müllaufsammler
Implizit erzeugte String-Objekte
Private Konstruktoren, Utility-Klassen, Singleton und Fabriken
Vererbung
331
6.7.1
6.7.2
6.7.3
6.7.4
6.7.5
6.7.6
6.7.7
6.7.8
6.7.9
6.7.10
6.7.11
6.7.12
6.7.13
6.7.14
6.7.15
6.7.16
6.7.17
331
331
332
333
335
336
337
339
339
340
343
345
346
346
347
348
348
Vererbung in Java
Einfach- und Mehrfachvererbung
Gebäude modelliert
Konstruktoren in der Vererbung
Sichtbarkeit protected
Das Substitutionsprinzip
Automatische und explizite Typanpassung
Typen testen mit dem binären Operator instanceof
Array-Typen und Kovarianz
Methoden überschreiben
Mit super eine Methode der Oberklasse aufrufen
Kovariante Rückgabetypen
Finale Klassen
Nicht überschreibbare Funktionen
Zusammenfassung zur Sichtbarkeit
Sichtbarkeit in der UML
Zusammenfassung: Konstruktoren und Methoden
Object ist die Mutter aller Oberklassen
349
6.8.1
6.8.2
6.8.3
6.8.4
6.8.5
6.8.6
6.8.7
349
350
352
355
358
359
361
Klassenobjekte
Objektidentifikation mit toStringO
Objektgleichheit mit equalsO und Identität
Klonen eines Objekts mit clone()
Hashcodes
Aufräumen mit finalizeO
Synchronisation
Die Oberklasse gibt Funktionalität vor
361
6.9.1
6.9.2
6.9.3
363
364
366
Dynamisches Binden als Beispiel für Polymorphie
Keine Polymorphie bei privaten, statischen und finalen Methoden
Polymorphie bei Konstruktoraufrufen
Abstrakte Klassen und abstrakte Methoden
368
6.10.1
6.10.2
368
369
Abstrakte Klassen
Abstrakte Methoden
Schnittstellen
372
6.11.1
6.11.2
6.11.3
6.11.4
6.11.5
6.11.6
375
377
379
379
381
383
Ein Polymorphie-Beispie! mit Schnittstellen
Die Mehrfachvererbung bei Schnittstellen
Erweitern von Interfaces - Subinterfaces
Vererbte Konstanten bei Schnittstellen
Vordefinierte Methoden einer Schnittstelle
Abstrakte Klassen und Schnittstellen im Vergleich
Inhalt
11
6.11.7
6.11.8
CharSequenceals Beispiel einer Schnittstelle
Die Schnittstelle Iterable
3^3
388
6.12
Innere Klassen
6.12.1 Statische innere Klassen und Schnittstellen
6.12.2 Mitglieds- oder Elementklassen
6.12.3 Lokale Klassen
6.12.4 Anonyme innere Klassen
6.12.5 this und Vererbung
6.12.6 Implementierung einer verketteten Liste
6 12.7 Funktionszeiger
. . „ , . , .
6.13
Genensche 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
6.14
Die Spezial-Oberklasse Enum
6.14.1 Methoden auf Enum-Objekten
6.14.2 enum mit eigenen Konstruktoren und Methoden
6 15
Dokumentationskommentare mit javaDoc
6.15.1 Einen Dokumentationskommentar setzen
6.15.2 Mitjavadoc eine Dokumentation erstellen
6.15.3 HTML-Tags in Dokumentationskommentaren
6.15.4
6.15.5
6 15.6
6.15.7
Generierte Dateien
Weitere Dokumentationskommentare
javaDoc und Doclets
Veraltete (deprecated) Klassen, Konstruktoren und Methoden
388
401
404
412
^'
414
41
41/
d.21
7
Exceptions
7.1
Problembereiche einzäunen
7.1.1
Exceptions in Java mit try und catch
7.1.2
Eine Datei auslesen mit RandomAccessFile
7.1.3
Ablauf einer Ausnahmesituation
7.1.4
Wiederholung kritischer Bereiche
7.1.5
throws im Methodenkopf angeben
7.1.6
Abschließende Arbeiten mit finally
7.1.7
Nicht erreichbare catch-Klauseln
72
Die Klassenhierarchie der Fehler
7.3
7.2.1
7.2.2
7.2.3
7.2.4
7.2.5
Werfen
423
424
4
42
431
431
Die Exception-Hierarchie
Oberausnahmen fangen
Alles geht als Exception durch
RuntimeException muss nicht aufgefangen werden
Harte Fehler: Error
eigener Exceptions
434
435
435
7.3.1
12
Inhalt
Mit throw Ausnahmen auslosen
7.3.2
Neue Exception-Klassen definieren
437
7.3.3
Geschachtelte Ausnahmen
438
7.4
Rückgabewerte bei ausgelösten Ausnahmen
439
7.5
Der Stack Trace
7.5.1
Stack Trace aus Throwable
7.5.2
Stack Trace aus Thread
440
440
442
7.6
Assertions
442
7.6.1
7.6.2
7.6.3
442
442
443
8
8.1
8.2
8.3
8.4
8.5
8.6
Assertions in Java
Assertions in eigenen Programmen nutzen
Assertions aktivieren
Die Funktionsbibliothek
445
Die Java-Klassenphilosophie
447
8.1.1
447
Übersicht über die Pakete der Standardbibliothek
Wrapper-Klassen
453
8.2.1
8.2.2
8.2.3
8.2.4
8.2.5
8.2.6
8.2.7
454
455
458
459
460
463
465
Die Basisklasse Number für numerische Wrapper-Objekte
Die Klasse Integer
Wertebereich eines Typs und Überlaufkontrolle
Unterschiedliche Ausgabeformate
Autoboxing: Boxing und Unboxing
Die Character-Klasse
Die Boolean-Klasse
Benutzereinstellungen
466
8.3.1
8.3.2
8.3.3
8.3.4
466
467
469
469
Eine zentrale Registry
Einträge einfügen, auslesen und löschen
Auslesen der Daten und Schreiben in anderem Format
Auf Ereignisse horchen
Die Utility-Klasse System
469
8.4.1
8.4.2
8.4.3
8.4.4
8.4.5
8.4.6
469
470
470
471
472
473
Systemeigenschaften der Java-Umgebung
line.Separator
Browser-Version abfragen
Property von der Konsole aus setzen
Umgebungsvariablen des Betriebssystems
Einfache Zeitmessung und Profiling
Ausführen externer Programme
475
8.5.1
8.5.2
8.5.3
8.5.4
8.5.5
8.5.6
8.5.7
475
476
477
477
478
478
480
Arbeiten mit dem ProcessBuilder
Die Rückgabe Process übernimmt die Prozesskontrolle
DOS-Programme aufrufen
Umgebungsvariablen und Startverzeichnis
Auf das Ende warten
Die Windows-Registry verwenden
Einen HTML-Browser unter Windows aufrufen
Klassenlader (Class Loader)
480
8.6.1
8.6.2
480
482
Woher die kleinen Klassen kommen
Die wichtigsten drei Typen von Klassenladern
Inhalt
13
8.6.3
8.6.4
8.6.5
8.6.6
8.6.7
Der Java. lang.ClassLoader
Hot Deployment mit dem URL-ClassLoader
Das jre/lib/endorsed-Verzeichnis
getContextClassLoaderO vom Thread
Wie heißt die Klasse mit der Methode mainO?
483
484
486
486
487
8.7
Annotationen
8.7.1
Die eingebauten Annotations-Typen aus Java.lang
8.7.2
@Deprecated
8.7.3
Annotationen mit zusätzlichen Informationen
8.7.4
@SuppressWarnings
9
Threads und nebenläufige Programmierung
9.1
Prozesse und Threads
9.1.1
Wie parallele Programme die Geschwindigkeit steigern können
493
494
9.2
Threads
9.2.1
9.2.2
9.2.3
9.2.4
9.2.5
496
496
497
499
499
501
9.3
9.4
9.5
Inhalt
erzeugen
Threads über die Schnittstelle Runnable implementieren
Thread mit Runnable starten
Der Name eines Threads
Die Klasse Thread erweitern
W e r b i n ich?
488
488
489
489
489
491
Der Ausführer (Executor) kommt
502
9.3.1
9.3.2
9.3.3
9.3.4
9.3.5
502
503
504
506
Die Schnittstelle Executor
DieThread-Pools
Threads mit Rückgabe über Callable
Mehrere Callable abarbeiten
Mit ScheduledExecutorService wiederholende Ausgaben
und Zeitsteuerungen
506
Die Zustände eines Threads
507
9.4.1
9.4.2
9.4.3
9.4.4
9.4.5
9.4.6
9.4.7
9.4.8
9.4.9
9.4.10
508
510
510
511
513
514
517
517
518
519
Threads schlafen
Das Ende eines Threads
UncaughtExceptionHandler für unbehandelte Ausnahmen
Einen Thread höflich mit Interrupt beenden
Der stopO von außen und die Rettung mit ThreadDeath
Ein Rendezvous mit join() und Barrier sowie Austausch mit Exchanger
MityieldO auf Rechenzeit verzichten
Arbeit niederlegen und wieder aufnehmen
Priorität
Der Thread ist ein Dämon
Synchronisation über kritische Abschnitte
521
9.5.1
9.5.2
9.5.3
9.5.4
9.5.5
9.5.6
9.5.7
9.5.8
521
521
522
523
524
525
529
531
Gemeinsam genutzte Daten
Probleme beim gemeinsamen Zugriff und kritische Abschnitte
Punkte parallel initialisieren
i++sieht atomar aus, ist es aber nicht
Kritische Abschnitte schützen
Schützen mit ReentrantLock
Synchronisieren mit synchronized
Synchronized-Methoden der Klasse StringBuffer
9.6
9.7
9.8
9.9
9.10
9.5.9
9.5.10
9.5.11
9.5.12
9.5.13
Mit synchronized synchronisierte Blöcke
Look-Freigabe im Fall von Exceptions
Mit synchronized nachträglich synchronisieren
Monitore sind reentrant, gut für die Geschwindigkeit
Synchronisierte Methodenaufrufe zusammenfassen
531
532
533
534
535
9.5.14
Deadlocks
536
9.5.15
Erkennen von Deadlocks
537
Synchronisation über Warten und Benachrichtigen
538
9.6.1
9.6.2
9.6.3
9.6.4
9.6.5
539
542
546
547
548
Die Schnittstelle Condition
Beispiel Erzeuger-Verbraucher-Programm
Warten mit wait() und Aufwecken mit notifyO
Falls der Lock fehlt: HlegalMonitorStateException
Semaphoren
Atomares und frische Werte mit volatile
551
9.7.1
9.7.2
552
553
Der Modifizierer volatile bei Objekt-/Klassenvariablen
Das Paket Java.util.concurrent.atomic
Mit dem Thread verbundene Variablen
554
9.8.1
9.8.2
554
556
ThreadLocal
InheritableThreadLocal
Gruppen von Threads in einer Thread-Gruppe
557
9.9.1
9.9.2
9.9.3
9.9.4
557
558
560
563
Aktive Threads in der Umgebung
Etwas über die aktuelle Thread-Gruppe herausfinden
Threads in einer Thread-Gruppe anlegen
Methoden von Thread und ThreadGroup im Vergleich
Die Klassen Timer und TimerTask
564
9.10.1
565
Job-Scheduler Quartz
9.11
Einen Abbruch der virtuellen Maschine erkennen
10
Raum und Zeit
565
569
10.1
Greenwich Mean Time (GMT)
571
10.2
Wichtige Datum-Klassen im Überblick
572
10.3
Sprachen der Länder
572
10.3.1
573
Sprachen und Regionen über Locale-Objekte
10.4
Übersetzung durch ResourceBundle-Objekte
576
10.5
Zeitzonen
10.5.1 Zeitzonen durch die Klasse TimeZone repräsentieren
578
580
10.6
Die Klasse Date
581
10.7
Calendar und GregorianCalendar
583
10.7.1
10.7.2
10.7.3
10.7.4
583
584
586
588
10.6.1
Objekte erzeugen und Methoden nutzen
Die abstrakte Klasse Calendar
Der gregorianische Kalender
Ostertage
Abfragen und Setzen von Datumselementen
581
10.8
11
11.1
Formatieren der Datumsangaben
593
10.8.1
10.8.2
10.8.3
593
600
602
Datenstrukturen und Algorithmen
11.3
Daten strukturen und die Collection-API
605
605
607
608
609
610
610
612
612
11.2.1
11.2.2
612
614
Die Schnittstellen Enumeration und Iterator
Der typisierte Iterator
Listen
616
Die Schnittstelle List
Beispiel mit List-Methoden
ArrayList
Arrays.asListO und die »echten« Listen
toArrayO von Collection verstehen - die Gefahr einer Falle erkennen
Die interne Arbeitsweise von ArrayList und Vector
LinkedList
617
619
621
623
623
626
627
Stack (Kellerspeicher, Stapel)
627
11.4.1
11.4.2
628
628
Die Methoden von Stack
Ein Stack ist ein Vector-aha!
11.5
Queues (Schlangen)
11.5.1 Blockierende Queues und Prioritätswarteschlangen
629
630
11.6
Assoziative Speicher HashMap und TreeMap
631
11.6.1
11.6.2
11.6.3
11.6.4
11.6.5
11.6.6
11.6.7
631
631
634
634
635
636
637
11.7
16
Die Schnittstelle Collection
Das erste Programm mit Container-Klassen
Die Schnittstelle Iterable und das erweiterte for
Generische Datentypen in der Collection-API
Generischer Typ bei Iterable und konkreter Typ beim
erweiterten for
Schnittstellen, die Collection erweitern und Map
Konkrete Container-Klassen
Mit einem Iterator durch die Daten wandern
11.3.1
11.3.2
11.3.3
11.3.4
11.3.5
11.3.6
11.3.7
11.4
603
11.1.1
11.1.2
11.1.3
11.1.4
11.1.5
11.1.6
11.1.7
11.2
Mit DateFormat und SimpleDateFormat formatieren
Parsen von Datumswerten
Parsen und Formatieren ab bestimmten Positionen
Inhalt
Ein Objekt der Klasse HashMap erzeugen
Einfügen und Abfragen der Datenstruktur
Wichtige Eigenschaften von Assoziativspeichern
Elemente im Assoziativspeicher müssen unveränderbar bleiben
Aufzählen der Elemente
Der Cleichheitstest, Hash-Wert und Klon einer Hash-Tabelle
Die Arbeitsweise einer Hash-Tabelle
Die Properties-Klasse
639
11.7.1
11.7.2
11.7.3
11.7.4
11.7.5
11.7.6
639
639
641
641
641
643
Properties setzen und lesen
Properties verketten
Eigenschaften ausgeben
Hierarchische Eigenschaften
Properties speichern
Über die Beziehung Properties und Hashtable
11.8
11.9
Mengen (Sets)
643
11.8.1
11.8.2
11.8.3
645
646
647
HashSet
TreeSet - die Menge durch Bäume
LinkedHashSet
Algorithmen in Collections
648
11.9.1
11.9.2
11.9.3
11.9.4
11.9.5
11.9.6
Datenmanipulation: Umdrehen, Füllen, Kopieren
Vergleichen von Objekten mit Comparator und Comparable
Den größten und kleinsten Wert einer Collection finden
Sortieren
Elemente in der Collection suchen
Nicht-änderbare Datenstrukturen
649
649
652
653
656
657
11.9.7
nCopiesO
657
11.9.8
Singletons
658
11.10 Synchronisation der Datenstrukturen
11.10.1 Lock-Free-Algorithmen aus Java.util.concurrent
11.10.2 Wrapper zur Synchronisation
11.10.3 CopyOnWriteArrayList und CopyOnWriteArraySet
11.11 Die abstrakten Basisklassen für Container
11.11.1 Optionale Methoden
11.12 Die Klasse BitSetfür Bitmengen
11.12.1
11.12.2
11.12.3
11.12.4
Ein BitSet anlegen und füllen
Mengenorientierte Operationen
Funktionsübersicht
Primzahlen in einem BitSet verwalten
658
658
659
660
660
661
661
661
662
663
664
11.13 Ein Design-Pattern durch Beobachten von Änderungen
665
11.13.1 Design-Pattern
11.13.2 Das Beobachter-Pattern (Observer/Observable)
665
666
12
Datenströme und Dateien
12.1
Datei und Verzeichnis
673
12.1.1
12.1.2
12.1.3
12.1.4
12.1.5
12.1.6
12.1.7
12.1.8
12.1.9
12.1.10
12.1.11
12.1.12
12.1.13
12.1.14
12.1.15
674
674
676
677
678
678
680
682
684
685
686
686
687
687
688
Dateien und Verzeichnisse mit der Klasse File
Dateieigenschaften und -attribute
Änderungsdatum einer Datei, Nur-Lese-Rechte setzen
Dateien berühren, neue Dateien anlegen, temporäre Dateien
Umbenennen und Verzeichnisse anlegen
Die Wurzel aller Verzeichnisse/Laufwerke
Verzeichnisse listen und Dateien filtern
Dateien und Verzeichnisse löschen
Verzeichnisse nach Dateien rekursiv durchsuchen
Namen der Laufwerke
URL-und URI-Objekte aus einem File-Objekt ableiten
Locking
Sicherheitsprüfung
Implementierungsmöglichkeiten für die Klasse File
Mime-Typen
671
12.2
12.3
12.4
Dateien
12.2.1
12.2.2
12.2.3
12.2.4
12.2.5
12.2.6
12.6
12.7
12.8
12.9
18
Inhalt
°89
689
689
691
691
691
693
Stream-Klassen und Reader/Writer
693
12.3.1
12.3.2
693
694
Die abstrakten Basisklassen
Übersicht über Ein-/Ausgabeklassen
Binäre Ein-/Ausgabe-Klassen InputStream/OutputStream
695
12.4.1
12.4.2
12.4.3
12.4.4
12.4.5
12.4.6
695
697
12.4.7
12.4.8
12.4.9
12.5
mit wahlfreiem Zugriff
Ein RandomAccessFile zum Lesen und Schreiben öffnen
Aus dem RandomAccessFile lesen
Schreiben
Die Länge des RandomAccessFile
Hin und her in der Datei
Wahlfreier Zugriff und Pufferung mit Unified I/O
Die abstrakte Basisklasse OutputStream
Die Schnittstellen Closeable und Flushable
Ein Datenschlucker
Anwendung der Klasse FileOutputStream
Die abstrakte Eingabeklasse InputStream
Ressourcen wie Grafiken aus dem Klassenpfad und
aus Jar-Archiven laden
Anwenden der Klasse FilelnputStream
Kopieren von Dateien
Das FileDescriptor-Objekt
697
698
699
700
700
701
703
PrintStream und Konsolenausgaben
703
12.5.1
12.5.2
12.5.3
12.5.4
12.5.5
704
705
706
708
710
Die Klasse PrintStream
Die Schnittstelle Appendable
System.in und System.out
Ströme umlenken
Den Bildschirm löschen und Textausgaben optisch aufwerten
Daten filtern durch FilterlnputStream und
FilterOutputStream
12.6.1 DataOutputStream/DatalnputStream
711
712
Besondere OutputStream-und InputStream-Klassen
712
12.7.1
12.7.2
12.7.3
713
714
714
Mit ByteArrayOutputStream in ein Byte-Feld schreiben
Mit ByteArraylnputStream aus einem Byte-Feld lesen
Ströme zusammensetzen mit SequencelnputStream
Die Unterklassen von Writer
716
12.8.1
12.8.2
12.8.3
12.8.4
12.8.5
12.8.6
12.8.7
12.8.8
Die abstrakte Basisklasse Writer
Ausgabemöglichkeiten durch PrintWriter erweitern
Datenkonvertierung durch den OutputStreamWriter
In Dateien schreiben mit der Klasse FileWriter
StringWriter und CharArrayWriter
Writer als Filter verketten
Gepufferte Ausgabe durch BufferedWriter
Daten mit FilterWriter filtern
717
719
721
722
723
725
726
728
Die Klassen um Reader
12.9.1 Die abstrakte Basisklasse Reader
12.9.2 Automatische Konvertierungen mit dem InputStreamReader
12.9.3 Dateien lesen mit der Klasse FileReader
12.9.4 StringReader und CharArrayReader
733
734
736
737
738
12.10 Die Filter für Zeichenströme
12.10.1
12.10.2
12.10.3
12.10.4
Gepufferte Eingaben mit der Klasse BufferedReader
LineNumberReader zählt automatisch Zeilen mit
Eingaben filtern mit der Klasse FilterReader
Daten mit der Klasse PushbackReader zurücklegen
12.11 Kommunikation zwischen Threads mit Pipes
12.11.1
12.11.2
PipedOutputStream und PipedlnputStream
PipedWriter und PipedReader
12.12 Datenkompression
12.12.1
12.12.2
12.12.3
12.12.4
Java-Unterstützung beim Komprimieren und Zusammenpacken
Datenströme komprimieren
Zip-Archive
Jar-Archive
12.13 Prüfsummen
12.13.1
12.13.2
12.13.3
Die Schnittstelle Checksum
Die Klasse CRC32
Die Adler32-Klasse
12.14 Persistente Objekte und Serialisierung
12.14.1
12.14.2
12.14.3
12.14.4
12.14.5
12.14.6
12.14.7
12.14.8
12.14.9
12.14.10
12.14.11
12.14.12
Objekte speichern mit der Standard-Serialisierung
Objekte über die Standard-Serialisierung lesen
Die Schnittstelle Serializable
Nicht serialisierbare Attribute mit transient aussparen
Das Abspeichern selbst in die Hand nehmen
Tiefe Objektkopien
Versionenverwaltung und die SUID
Wie die ArrayList serialisiert
Probleme mit der Serialisierung
Serialisieren in XML-Dateien
JavaBeans Persistence
XStream
12.15 Zugriff auf SMB-Server
12.15.1
jCIFS
12.16 Tokenizer
12.16.1
12.16.2
739
739
741
743
745
748
748
750
752
753
753
756
763
763
763
764
766
766
767
770
772
773
774
777
779
781
782
782
782
784
785
785
786
StreamTokenizer
CSV (Comma Separated Values)-Dateien verarbeiten
12.17 Die Logging-API
786
789
790
13
Die eXtensible Markup Language (XAAL)
13.1
Auszeichnungssprachen
795
13.1.1
13.1.2
795
796
13.2
Die Standard Generalized Markup Language (SGML)
Extensible Markup Language (XML)
793
Eigenschaften von XML-Dokumenten
796
13.2.1
13.2.2
13.2.3
796
798
801
Elemente und Attribute
Beschreibungssprache für den Aufbau von XML-Dokumenten
Schema-eine Alternative zu DTD
Inhalt
19
13.2.4
13.2.5
803
805
13.3
Die Java-APIs für XML
13.3.1 Das Document Object Model (DOM)
13.3.2 Simple API f o r X M L Parsing (SAX)
13.3.3 Java Document Object Model (JDOM)
13.3.4 Pull-API StAX
805
805
806
806
806
13.4
Serielle Verarbeitung mit StAX
807
13.4.1
13.4.2
13.4.3
13.4.4
13.4.5
807
807
809
810
811
13.5
13.6
13.7
Unterschiede der Verarbeitungsmodelle
XML-Dateien mit dem Cursor-Verfahren lesen
XML-Dateien mit dem Iterator-Verfahren verarbeiten
Mit Filtern arbeiten
XML-Dokumente schreiben
Serielle Verarbeitung von XML mit SAX
813
13.5.1
13.5.2
13.5.3
813
813
814
Schnittstellen von SAX
SAX-Parser erzeugen
Die wichtigsten Methoden der Schnittstelle ContentHandier
XML-Dateien mit JDOM verarbeiten
815
13.6.1
13.6.2
13.6.3
13.6.4
13.6.5
13.6.6
13.6.7
13.6.8
13.6.9
13.6.10
13.6.11
13.6.12
816
816
817
818
819
819
820
822
824
825
827
830
JDOM beziehen
Paketübersicht
Die Document-Klasse
Eingaben aus der Datei lesen
Das Dokument im XML-Format ausgeben
Der Dokumenttyp
Elemente
Zugriff auf Elementinhalte
Liste mit Unterelementen erzeugen
Neue Elemente einfügen und ändern
Attributinhalte lesen und ändern
XPath
JAXP als Java-Schnittstelle zu XML
832
13.7.1
13.7.2
833
835
Einführung in XSLT
Umwandlung von XML-Dateien mit JDOM und JAXP
13.8
HTML-Dokumente einlesen
14
Crafikprogrammierung mit dem AWT
14.1
20
Namensraum (Namespace)
XML-Applikationen
836
839
Das Abstract-Window-Toolkit
841
14.1.1
841
Java Foundation Classes
14.2
Das Toolkit
842
14.3
Fenster unter grafischen Oberflächen
843
14.3.1
14.3.2
14.3.3
14.3.4
14.3.5
14.3.6
843
844
845
846
847
848
Inhalt
AWT-Fenster darstellen
Swing-Fenster darstellen
Sichtbarkeit des Fensters
Größe und Position des Fensters verändern
Hauptprogramm von Frame/JFrame ableiten
Fenster- und Dialog-Dekoration
14.4
14.5
14.6
14.7
14.8
Grundlegendes zum Zeichnen
848
14.4.1
14.4.2
14.4.3
14.4.4
848
850
851
852
Einfache Zeichenfunktionen
854
14.5.1
14.5.2
14.5.3
14.5.4
14.5.5
854
854
855
856
856
Grundbegriffe: Koordinaten, Punkte, Pixel
Linien
Rechtecke
Ovale und Kreisbögen
Polygone und Polylines
Zeichenketten schreiben
860
14.6.1
14.6.2
14.6.3
14.6.4
14.6.5
860
862
863
864
867
Einen neuen Zeichensatz bestimmen
Ableiten eines neuen Fonts aus einem gegebenen Font
Zeichensätze des Systems ermitteln
Die Klasse FontAAetrics
TrueType Fonts
Clipping-Operationen
Farben
14.8.1
14.8.2
14.8.3
14.8.4
14.8.5
14.8.6
14.8.7
14.9
Die paintO-AAethodefür das AWT-Frame
Zeichen von Inhalten mit JFrame
Auffordern zum Neuzeichnen mit repaintO
Die ereignisorientierte Programmierung ändert Fensterinhalte
868
872
Zufällige Farbblöcke zeichnen
Farbanteile zurückgeben
Vordefinierte Farben
Farben aus Hexadezimalzahlen erzeugen
Einen helleren oder dunkleren Farbton wählen
Farbmodelle HSB und RGB
Die Farben des Systems
873
875
875
876
877
878
879
Bilder anzeigen und Grafiken verwalten
882
14.9.1
14.9.2
14.9.3
14.9.4
14.9.5
14.9.6
14.9.7
14.9.8
14.9.9
14.9.10
883
884
884
885
886
886
889
889
890
892
Bilder laden: eine Übersicht
Bilder über Toolkit laden für Applikationen
Bilder in Applets
Asynchrones Laden mit getImageO und dem AAediaTracker
Programm-Icon/Fenster-Icon setzen
Das Image zeichnen
Grafiken zentrieren
Bilder im Speicher erzeugen
Kein Flackern durch Double-Buffering
Bilder skalieren
14.9.11 Volatilelmage
894
14.9.12
14.9.13
14.9.14
14.9.15
14.9.16
14.9.17
14.9.18
14.9.19
894
895
895
896
897
899
899
902
Bilder lesen mit ImagelO
Schreiben mit ImagelO
Kann ImagelO ein Format behandeln?
Komprimieren mit ImagelO
Bilder im GIF-Format speichern
Gif speichern mit dem ACAAE-Paket
JPEG-Dateien mit dem Sun-Paket schreiben
Java Image Management Interface (JIMI)
14.10 Java2D-API
14.10.1 Grafische Objekte zeichnen
14.10.2 Geometrische Objekte durch Shape gekennzeichnet
902
903
904
In
14.10.3
14.10.4
14.10.5
14.10.6
Zeichenhinweise durch RenderingHints
Windungs-Regel
Dicke und Art der Linien bestimmen
Transformationen mit einem AffineTransform-Objekt
14.11 Produzenten, Konsumenten und Beobachter
906
907
909
912
914
914
14.11.1
14.11.2
14.11.3
14.11.4
Producer und Consumer für Bilder
Beispiel für die Übermittlung von Daten
Bilder selbst erstellen
Die Bildinformationen wieder auslesen
14.12 Filter
14.12.1
14.12.2
14.12.3
14.12.4
Grundlegende Eigenschaft von Filtern
Konkrete Filterklassen
Mit CropImageFilter Teile ausschneiden
Transparenz
924
Drucken mit dem einfachen Ansatz
Ein PrintJob
Drucken der Inhalte
Komponenten drucken
Den Druckeram Parallelport ansprechen
928
14.13
Drucken
14.13.1
14.13.2
14.13.3
14.13.4
14.13.5
915
918
921
924
14.13.6 Bekannte Drucker
14.14 Grafikverarbeitung ohne grafische Oberfläche
14.14.1 Xvfb-Server
14.14.2 Pure Java AWT Toolkit (PJA)
925
926
929
930
933
933
933
934
934
15
Komponenten, Container und Ereignisse
15.1
Es tut sich w a s - Ereignisse beim AWT
939
15.1.1
15.1.2
15 1 3
939
Die Klasse AWTEvent
Events auf verschiedenen Ebenen
Ereignisquellen und Horcher (Listener)
937
940
942
94?
15.2
15.3
22
Inhalt
15.1.4 Listener implementieren
15.1.5 Listener bei Ereignisauslöser anmelden/abmelden
15.1.6 Aufrufen der Listener
Varianten, das Fenster zu schließen
15.2.1 Eine Klasse implementiert die Schnittstelle WindowListener
15.2.2
15 2 3
Adapterklassen nutzen
Innere Mitgliedsklassen und innere anonyme Klassen
15.2.4
Generic Listener
Komponenten im AWT und in Swing
15.3.1 Peer-Klassen und Lightweight-Komponenten
15.3.2 Die Basis aller Komponenten: Component und JComponent
15.3.3 Proportionales Vergrößern eines Fensters
15.3.4 Dynamisches Layout während einer Größenänderung
15.3.5 Hinzufügen von Komponenten
943
944
94
5
94
8
95
°
951
955
956
957
15.4
15.5
Swing-Fenster JFrame, JDialog, JWindow
958
15.4.1
15.4.2
15.4.3
Kinder auf einem Swing-Fenster
Schließen eines Swing-Fensters
JWindow und JDialog
958
958
959
Informationstext über die Klasse JLabel
960
15.5.1
15.6
15.7
Mehrzelliger Text, HTML in der Darstellung
962
Die Klasse Imagelcon
963
15.6.1
15.6.2
965
966
Die Schnittstelle Icon
Was Icon und Image verbindet
Eine Schaltfläche (JButton)
967
15.7.1
15.7.2
15.7.3
15.7.4
969
970
973
975
Der aufmerksame ActionListener
Generic Listener für Schaltflächen-Ereignisse verwenden
AbstractButton
JToggleButton
15.8
Tooltips
975
15.9
Der Container JPanel
976
15.10 Alles Auslegungssache: die Layoutmanager
15.10.1
15.10.2
15.10.3
15.10.4
15.10.5
15.10.6
FlowLayout
Mit BorderLayout in allen Himmelsrichtungen
GridLayout
Der GridBagLayout-Manager
Null-Layout
Weitere Layoutmanager
15.11 Horizontale und vertikale Rollbalken
15.11.1 Der AdjustmentListener, der auf Änderungen hört
15.12 JSIider
977
978
980
982
984
989
989
990
993
995
15.13 Ein Auswahlmenü - Choice, JComboBox
996
15.13.1 ItemListener
15.13.2 Zuordnung einer Taste mit einem Eintrag
999
1000
15.13.3 DateComboBox
1001
15.14 Eines aus vielen - Kontrollfelder (JCheckBox)
15.14.1 Ereignisse über ItemListener
1001
1003
15.15 Kontrollfeldgruppen, Optionsfelder, JRadioButton
1003
15.16 Der Fortschrittsbalken JProgressBar
1005
15.17 Rahmen (Borders)
1007
15.18 Symbolleisten alias Toolbars
1009
15.19 Menüs
1011
15.19.1
15.19.2
15.19.3
15.19.4
Die Menüleisten und die Einträge
Menüeinträge definieren
Mnemonics und Shortcuts (Accelerator)
Popup-Menüs
1011
1013
1014
1016
15.20 Das Konzept des Model-View-Controllers
1019
15.21 List-Boxen
1021
15.22 JSpinner
1024
Inhalt
23
15.23 Texteingabefelder
15.23.1 Text in einer Eingabezeile
15.23.2
Die Oberklasse der JText-Komponenten: JTextComponent
15.23.3 JPasswordField
15.23.4 Validierende Eingabefelder
15.23.5 Mehrzellige Textfelder
15.23.6 Die Editor-Klasse JEditorPane
1°25
1026
1026
1°27
1028
1029
1031
15.24 Bäume mit JTree-Objekten
1°34
15.24.1
Selektionen bemerken
1°36
1038
1°38
1042
1043
1046
1047
1°48
1048
1049
1050
15.26 JRootPane, JLayeredPane und JDesktopPane
1050
15.26.1
15.26.2
JRootPane und JLayeredPane
JDesktopPane und die Kinder JlnternalFrame
15.27.1
15.27.2
Der Farbauswahldialog JColorChooser
Der Dateiauswahldialog
15.28 Flexibles Java-Look&Feel
15.28.1
15.28.2
15.28.3
1050
1051
1053
15.27 Dialoge
UlManager
Ändern des Aussehens Laufzeit
Verbessern des Aussehens unter Windows mit WinLAF
1054
1°56
1°58
1°59
1°60
1061
15.29 Swing-Beschriftungen einer anderen Sprache geben
1061
15.30 Die Zwischenablage (Clipboard)
1°62
15.31 Undo durchführen
1°66
15.32 Ereignisverarbeitung auf unterster Ebene
1067
15.32.1
15.32.2
Eigene Ereignisse in die Queue setzen
Auf alle Ereignisse hören
1068
1069
15.33 AWT, Swing und dieThreads
15.33.1 Swing ist nicht Thread-sicher
15.33.2 Swing-Elemente bedienen mit invokeLaterO, invokeAndWait()
1°69
1070
1072
15.34 Selbst definierte Cursor
15.34.1
Flackern des Mauszeigers bei Animationen vermeiden
1°73
1074
15.35 Benutzerinteraktionen automatisieren
1°75
15.35.1
15.35.2
15.35.3
15.35.4
24
1035
15.25 Tabellen mitJTable
15.25.1
Ein eigenes Tabellen-Model
15.25.2 AbstractTableModel
15.25.3
DefaultTableModel
15.25.4 Ein eigener Renderer für Tabellen
15.25.5 Zeil-Editoren
15.25.6 Größe und Umrandung der Zellen
15.25.7 Spalten Informationen
15.25.8 Tabellenkopf von Swing-Tabellen
15.25.9 Selektionen einer Tabelle
15.25.10 Ein professionelles Tabellenlayout mit JGrid
Inhalt
Automatisch in dieTasten hauen
Mausoperationen
Methoden zur Zeitsteuerung
Screenshots
1°76
1077
1077
1°77
15.35.5 Funktionsweise und Beschränkungen
1078
15.35.6 Mouselnfo und Pointerlnfo
1078
15.36 Zeitliches Ausführen mit dem javax.swing.Timer
1079
15.37 Alternativen zu AWT und Swing
15.37.1 XML-Beschreibungen der Oberfläche: Swixml, XUL/Luxor
1079
1079
15.37.2 SWT
1080
16
Das Netz
16.1
Grundlegende Begriffe
1083
16.1.1
1083
16.2
16.3
16.4
16.5
Internet-Standards und RFC
1081
URI und URL
1084
16.2.1
16.2.2
16.2.3
16.2.4
16.2.5
1085
1085
1088
1089
1091
URI
Die Klasse URL
Informationen über eine URL
Der Zugriff auf die Daten über die Klasse URL
Verbindungen durch einen Proxy-Server
Die Klasse URLConnection
1092
16.3.1
16.3.2
16.3.3
16.3.4
16.3.5
16.3.6
16.3.7
1092
1095
1095
1095
1096
1097
Methoden und Anwendung von URLConnection
Protokoll- und Content-Handler
Bilder-Handler
Zusammenfassung Content- und Protokoll-Handler
Im Detail: vom URL zu URLConnection
Der Protokoll-Handler für Jar-Dateien
Autorisierte URL-Verbindungen und Proxy-Authentifizierung
mit Basic Authentication
1098
Das Common Gateway Interface
1100
16.4.1
16.4.2
16.4.3
1100
1101
1103
Parameter für ein CGI-Programm
Kodieren der Parameter für CGI-Programme
Eine Suchmaschine ansprechen
Host- und IP-Adressen
1104
16.5.1
16.5.2
16.5.3
1105
1105
1106
Lebt der Rechner?
Das Netz ist Klasse
IP-Adresse des lokalen Hosts
16.6
Networkinterface
1107
16.7
Mit dem Socket zum Server
1108
16.7.1
Das Netzwerk ist der Computer
1108
16.7.2
Sockets
1109
16.7.3
16.7.4
16.7.5
16.7.6
16.7.7
16.7.8
16.7.9
16.7.10
16.7.11
Standarddienste unter Windows nachinstallieren
Eine Verbindung zum Server aufbauen
Server unter Spannung: die Ströme
Die Verbindung wieder abbauen
Ein kleines Echo - lebt der Rechner noch?
Blockierendes Lesen
Informationen über den Socket
Mittelnet an den Ports horchen
Reine Verbindungsdaten über SocketAddress
1110
1111
1112
1113
1113
1114
1115
1117
1118
Inhalt
25
., ,.
16.8
1119
Client/Server-Kommunikation
16.8.1 Warten auf Verbindungen
16.8.2 Ein Multiplikations-Server
16 8 3 Von außen erreichbar sein
Q
3
1124
16.9
SSL-Verbindungen mit JSSE
16.10 Apache Jakarta Commons HttpClient und Net
^
16.10.1 Jakarta Commons HttpClient
16 10.2 Jakarta Commons Net
1126
1126
16.11 E-Mail
16 11.1 Wie eine E-Mail um die Welt geht
16.11.2
16 1 1 3
16.11.4
16.11.5
16.11.6
16 1 1 7
112g
Das Simple Mail Transfer Protocol und RFC 822
POP (Post Office Protocol)
E-Mails versenden mit der JavaMail API von SUN
MimeMultipart-Nachrichten schicken
E-Mails mittels POP3 abrufen
Ereignisse und Suchen
^ ^
^ ^
^ ^
1133
6
1133
L n
16.12 Arbeitsweise eines Web-Servers
16.12.1 Das Hypertext Transfer Protocol (HTTP)
16.12.2 Anfragen an den Server
16 12 3 Die Antworten vom Server
^ ^
1137
1140
16.13
Datagram-Sockets
16 13.1 Die Klasse DatagramSocket
16.13.2 Datagramme und die Klasse DatagramPacket
16.13.3 Auf ein hereinkommendes Paket warten
16.13.4 Ein Paket zum Senden vorbereiten
16.13.5 Methoden der Klasse DatagramPacket
16 13 6 Das Paket senden
, c.
16.14 Tiefer liegende Netzwerkeigenschatten
16.14.1 Internet Control Message Protocol (ICMP)
16 14.2 MAC-Adresse
^ ^
^ ^
1146
^ ^
1148
g
^ ^
1149
16.15 Multicast-Kommunikation
17
17.1
.r
, .
Dynamische Web-Seiten und Servlets
17.1.1 Was sind Servlets?
17 1 2 Was sind Java Server Pages?
17 1 3 Vorteil von JSP/Servlets gegenüber CGI-Programmen
_,
17.2
1151
Servlets und Java Server Pages
. .
...
1153
1154
1156
Vom Client zum Server und wieder zurück
17 2 1
Der bittende Client
17.2.2
17 2 3
Welche Form von Antwort erzeugt ein Web-Server?
Wer oder was ist MIME?
_•
. „
^ ^
1159
17.3
26
Inhalt
Servlets und JSPs entwickeln und testen
17.3.1 Servlet-Container
17.3.2 Web-Server mit Servlet-Funktionalität
^
1160
17.4
Java Server Pages in Tomcat und Eclipse
17.4.1 Download und Installation
17.4.2 Ablageort für eigene JSP-Seiten
17.4.3 Web-Applikationen
17.4.4 Zuordnung von Web-Applikationen zu physikalischen Verzeichnissen
1161
1161
1162
1163
1163
17.5
Skript-Elemente
17.5.1 Scriptlets
17.5.2 Ausdrücke
17.5.3 Deklarationen
17.5.4 Kommentare
17.5.5 Quoting
17.5.6 Entsprechende XML-Tags
1164
1164
1165
1165
1166
1166
1166
17.6
Implizite Objekte
1167
17.7
Was der Browser mit auf den Weg gibt- HttpServletRequest
17.7.1 Verarbeiten der Header
17.7.2 Hilfsfunktion im Umgang mit Headern
17.7.3 Übersicht der Browser-Header
1168
1168
1169
1169
17.8
Formulardaten
1170
17.9
Das HttpServletResponse-Objekt
17.9.1 Automatisches Neuladen
17.9.2 Seiten umlenken
1172
1172
1173
17.10 JSP-Direktiven
17.10.1 page-Direktiven im Überblick
17.10.2 include-Direktive
17.10.3 Mit JSPs Bilder generieren
1174
1174
1176
1177
17.11 Aktionen
17.11.1 Aktion include
17.11.2 Aktion forward
17.11.3 Aktion plugin
1178
1178
1178
1178
17.12 Beans
17.12.1 Beans in JSP-Seiten anlegen, Attribute setzen und erfragen
17.12.2 Der schnelle Zugriff auf Parameter
1179
1180
1181
17.13 Kleine Kekse: die Klasse Cookies
17.13.1 Cookies erzeugen und setzen
17.13.2 Cookies vom Servlet einlesen
17.13.3 Kleine Helfer für Cookies
17.13.4 Cookie-Status ändern
17.13.5 Langlebige Cookies
1181
1182
1183
1184
1184
1186
17.14 Sitzungsverfolgung (Session Tracking)
17.14.1 Das mit einer Sitzung verbundene Objekt HttpSession
17.14.2 Werte mit einer Sitzung assoziieren und auslesen
17.14.3 URL-Rewriting
17.14.4 Zusätzliche Informationen
1186
1187
1187
1188
1189
17.15 Tag-Libraries
17.15.1 Standard Tag Library (JSTL)
17.15.2 Jakarta Taglibs Project
1191
1191
1192
Inhalt
27
17.16 Servlets
1193
17.16.1 Servlets compilieren
17.16.2 Die Servlets in das classes-Verzeichnis
17.16.3 Servlet-AAapping
17.17 Der Lebenszyklus eines Servlets
17.17.1
17.17.2
17.17.3
17.17.4
Initialisierung in init()
Abfragen bei service()
Mehrere Anfragen beim Servlet und die Thread-Sicherheit
Das Ende eines Servlets
17.18 Das HttpServletResponse-Objekt
17.18.1 Wir generieren eine Web-Seite
17.18.2 Binärdaten senden
17.18.3 Noch mehr über Header, die der Server setzt
17.19 Objekte und Dateien per POST verschicken
1194
1194
1194
1196
1197
1199
1200
1201
1201
1201
1202
1203
1204
17.19.1 Datei-Upload
1205
17.20 Servlets und Sessions
1206
17.21 Weiterleiten und Einbinden von Servlet-Inhalten
1207
17.22 Inter-Servlet-Kommunikation
1208
17.22.1 Daten zwischen Servlets teilen
17.23 Internationalisierung
17.23.1 Die Länderkennung des Anfragers auslesen
17.23.2 Länderkennung für die Ausgabe setzen
17.23.3 Westeuropäische Texte senden
17.24 Tomcat: Spezielles
17.24.1 Tomcat als Service unter Windows NT ausführen
17.24.2 Interessante Links zum Thema Servlets/JSP
18
18.1
Verteilte Programmierung mit RA/VI und SOAP
1208
1209
1209
1209
1209
1211
1211
1211
1213
Entfernte Methoden
1215
18.1.1
18.1.2
18.1.3
18.1.4
Wie entfernte Methoden arbeiten
Stellvertreter (Proxy)
RMI
Wie die Stellvertreter die Daten übertragen
1215
1215
1216
1216
18.1.5
Probleme mit entfernten Methoden
1217
18.2
Nutzen von RMI bei Middleware-Lösungen
1218
18.3
Die Lösung für Java ist RMI
18.3.1 Entfernte Objekte programmieren
1219
1219
18.3.2
18.4
Entfernte und lokale Objekte im Vergleich
Definition einer entfernten Schnittstelle
1220
1220
18.5
Implementierung der Remote-Schnittstelle
1221
18.6
Stellvertreterobjekte erzeugen
1221
18.7
Der Namensdienst (Registry)
18.7.1 Der Port
1222
1222
18.8
18.9
Der Server
1222
18.8.1
18.8.2
1222
1224
Entfernte Objekte beim Namensdienst anmelden
Automatisches Anmelden bei Bedarf
Einen Client programmieren
1224
18.9.1
1225
Einfaches Logging
18.10 Aufräumen mit dem DGC
1226
18.11 Entfernte Objekte übergeben und laden
1226
18.11.1 Klassen vom RMI-Klassenlader nachladen
1227
18.12 Registry wird vom Server gestartet
1227
18.13 RMI über die Firewall
1228
18.13.1 RMI über HTTP getunnelt
18.14 RMI und CORBA
18.15 Daily Soap
18.15.1 SOAP-Implementierungen
18.15.2 Einen Client mit der Apache-Bibliothek implementieren
18.15.3 Der Seifen-Server
18.16 Java Message Service (JMS)
19
Applets, Midlets und Sound
19.1
Applets und Applikationen - w e r darf was?
1228
1229
1229
1230
1231
1232
1233
1235
1237
19.2
Das erste Hallo-Applet
1237
19.3
Die Zyklen eines Applets
1238
19.4
Parameter an das Applet übergeben
1239
19.5
Methoden der Applet- und AppletContext-Klasse
1240
19.5.1
19.5.2
19.5.3
19.5.4
1240
1241
1242
1245
Wie das Applet den Browser-Inhalt ändern kann
Den Ursprung des Applets erfragen
Datenaustausch zwischen Applets
Was ein Applet alles darf
19.6
Fehler in Applets finden
1245
19.7
Browserabhängiges Verhalten
1245
19.7.1
19.7.2
19.7.3
1245
1246
1247
Java im Browser aktiviert?
Läuft das Applet unter Netscape oder Microsoft Explorer?
Datenaustausch zwischen Applets und Java-Skripten
19.8
Musik in einem Applet und in Applikationen
1248
19.9
Webstart
1249
19.10 Java 2 Micro Edition
19.10.1 Konfigurationen
19.10.2 Profile
1250
1250
'.'.'.'.'.'.'..1251
Datenbankmanagement mit JDBC
20.1
Das relationale Modell
1257
20.2
JDBC: der Zugriff auf Datenbanken über Java
1258
20.3
Die Rolle von SQL
20.3.1 Ein Rundgang durch SQL-Anfragen
20.3.2 Datenabfrage mit der Data Query Language (DQL)
20.3.3 Tabellen anlegen mit der Data Definition Language (DDL)
1258
20.4
20.5
20.6
20.7
1259
1260
1262
Datenbanktreiber für den Zugriff
1263
20.4.1
1
Treibertypen
Datenbanken und ihre Treiber
2 6 3
1264
Derby
1264
20.5.2
MySQL
1266
20.5.3
20.5.4
Microsoft Access
Ein Typ-4-Treiber für den Microsoft SQL Server 2000
20.5.5
OraclelOg
1268
20.5.6
Eclipse-Plugins zum Durchschauen von Datenbanken
1268
20.5.1
1266
1268
1271
Eine Beispielabfrage
Mit Java an eine Datenbank andocken
20.7.1 Der Treibermanager
1273
1273
20.7.2
20.7.3
20.7.4
20.7.5
Den Treiber laden
Eine Aufzählung aller Treiber
Log-Informationen
Verbindung zur Datenbank
1274
1275
1276
1277
20.8
Datenbankabfragen
20.8.1 Abfragen über das Statement-Objekt
20.8.2 Ergebnisse einer Abfrage in ResultSet
20.8.3 Java und SQL-Datentypen
20.8.4 Unicode in der Spalte korrekt auslesen
20.8.5 wasNullO bei ResultSet
20.8.6 Wie viele Zeilen hat ein ResultSet?
1280
1280
1280
1281
1285
1285
1285
20.9
Die Ausnahmen bei JDBC
1286
20.10 Transaktionen
1286
20.11 Elemente einer Datenbank hinzufügen und aktualisieren
1287
20.11.1 Batch-Updates
20.12 Vorbereitete Anweisungen (Prepared Statements)
20.13
1288
1289
20.12.1 PreparedStatement-Objekte vorbereiten
20.12.2 Werte für die Platzhalter eines PreparedStatement
1289
1290
Die LOBs (Large Objects)
1291
20.13.1 Einen BLOB besorgen
1291
20.14 Die SQL3-Datentypen ARRAY, STRUCT und REF
1292
20.15 Metadaten
20.15.1 Metadaten über die Tabelle
1292
20.15.2 Informationen über die Datenbank
30
1255
20
Inhalt
1292
1296
20.16 DataSource
20.16.1 Die Schnittstelle DataSource
21
21.1
Reflection und Annotationen
Metadaten
21.1.1
21.2
21.3
21.4
21.5
21.6
22
22.1
XDocIet
1297
1297
1299
1301
1301
Mit dem Class-Objekt etwas über Klassen erfahren
1302
21.2.1
21.2.2
21.2.3
21.2.4
21.2.5
21.2.6
21.2.7
21.2.8
21.2.9
21.2.10
21.2.11
21.2.12
1302
1304
1306
1308
1309
1309
1310
1311
1313
1316
1319
1321
An ein Class-Objekt kommen
Was das Class-Objekt beschreibt
Der Name der Klasse
Die Arbeit auf dem Feld
instanceof mit Class-Objekten
Oberklassen finden
Implementierte Interfaces einer Klasse oder eines Interfaces
Modifizierer und die Klasse Modifier
Die Attribute einer Klasse
Methoden einer Klasse erfragen
Konstruktoren einer Klasse
Annotationen
Objekte manipulieren
1321
21.3.1
21.3.2
21.3.3
21.3.4
21.3.5
1321
1323
1325
1326
1328
Objekte erzeugen
Die Belegung der Variablen erfragen
Eine generische toStringO-Funktion
Variablen setzen
Private Attribute ändern
Methoden aufrufen
1328
21.4.1
21.4.2
1330
1331
Statische Methoden aufrufen
Dynamische Methodenaufrufe bei festen Methoden beschleunigen
Informationen und Identifizierung von Paketen
1332
21.5.1
1333
Geladene Pakete
Annotationen
1334
21.6.1
21.6.2
21.6.3
21.6.4
21.6.5
21.6.6
21.6.7
1335
1335
1336
1339
1340
1343
1345
Neue Annotationen definieren
Annotationen mit genau einem Element
Beliebige Schlüssel-/Werte-Paare
Vorbelegte Elemente
Annotieren von Annotations-Typen
Annotationen zur Laufzeit ausgelesen
Mögliche Nachteile von Annotationen
Komponenten durch Bohnen
1347
Grundlagen der Komponententechnik
1349
22.1.1
22.1.2
22.1.3
1349
1350
1350
Brauchen wir Komponenten überhaupt?
Visuelle und nichtvisuelle Komponenten
Komponenten-Technologien von Microsoft
Inhalt
31
22.2
1351
22.2.1
22.2.2
Eine Beispielsitzung im BDK
Verknüpfungen zwischen Komponenten
1352
1353
22.2.3
Beans speichern
1354
22.3
Die kleinste Bohne der Welt
1354
22.4
Jar-Archive für Komponenten
1355
22.5
Worauf JavaBeans basieren
1356
22.6
Eigenschaften
22.6.1 Einfache Eigenschaften
22.6.2 Boolesche Eigenschaften
22.6.3 Indizierte Eigenschaften
1357
1358
1358
1359
22.7
Ereignisse
22.7.1 Multicast und Unicast
22.7.2 Namenskonvention
1360
1360
1361
22.8
Weitere Eigenschaften
1364
22.8.1
22.8.2
22.8.3
1364
1366
1366
22.9
32
Das JavaBeans Development Kit (BDK)
Gebundene Eigenschaften
Anwendung von PropertyChange bei AWT-Komponenten
Veto-Eigenschaften. Dagegen!
Bean-Eigenschaften anpassen
1367
22.9.1
1368
Customizer
22.10 Property-Editoren
1369
22.11 Beanlnfo
1369
22.12
Beliebte Fehler
1370
23
Java Management Extensions (JAAX)
1371
23.1
Überwachen von Systemzuständen
1373
23.2
MBean-Typen, MBean-Server und weitere Begriffe
1374
23.2.1
1374
MBeans des Systems
23.3
JConsole
1376
23.4
Der MBeanServer
1377
23.5
Eine eigene Standard-MBean
1379
24
Java Native Interface (JNI)
24.1
Java Native Interface und Invocation-API
24.2
Einbinden einer C-Funktion in ein Java-Programm
1384
24.2.1
24.2.2
24.2.3
24.2.4
1384
1384
1385
1386
Inhalt
Schreiben des Java-Codes
Compilieren des Java-Programms
Erzeugen der Header-Datei
Implementierung der Methode in C
1381
1383
24.2.5
24.2.6
Übersetzen der C-Programme und Erzeugen
der dynamischen Bibliothek
Setzen der Umgebungsvariablen
1387
1388
24.3
Nativ die Stringlänge ermitteln
1388
24.4
Erweiterte JNI-Eigenschaften
1389
24.4.1
24.4.2
1390
1390
Klassendefinitionen
Zugriff auf Attribute
24.5
Links und Weiteres
25
Sicherheitskonzepte
1392
1395
25.1
Der Sandkasten (Sandbox)
1397
25.2
Sicherheitsmanager (Security Manager)
1397
25.2.1
25.2.2
25.2.3
25.2.4
25.2.5
25.2.6
1399
1401
1402
1402
1404
1405
25.3
25.4
25.5
26
Der Sicherheitsmanager bei Applets
Sicherheitsmanager aktivieren
Wie nutzen die Java-Bibliotheken den Sicherheitsmanager?
Rechte vergeben durch Policy-Dateien
Erstellen von Rechte-Dateien mit dem grafischen Policy-Tool
Kritik an den Policies
Dienstprogramme zur Signierung
1406
25.3.1
25.3.2
1406
1407
Mit keytool Schlüssel erzeugen
Signieren mit jarsigner
Digitale Unterschriften
1407
25.4.1
25.4.2
25.4.3
25.4.4
25.4.5
1408
1409
1409
1409
1412
Die MDx-Reihe
Secure Hash Algorithm (SHA)
Mit der Security-API einen Fingerabdruck berechnen
Die Klasse MessageDigest
Unix-Crypt
Verschlüsseln von Daten(-strömen)
1412
25.5.1
25.5.2
25.5.3
1413
1414
1414
Den Schlüssel bitte
Verschlüsseln mit Cipher
Verschlüsseln von Datenströmen
Dienstprogramme für die Java-Umgebung
1417
26.1
Die Werkzeuge im Überblick
1419
26.2
Der Compiler javac
1419
26.2.1
26.2.2
1420
1421
26.3
Der Java-Interpreter Java
Der Unterschied zwischen Java.exe und javaw.exe
Das Archivformat Jar
1422
26.3.1
26.3.2
26.3.3
26.3.4
1423
1424
1425
1426
Das Dienstprogramm Jar benutzen
Das Manifest
Applikationen in Jar-Archiven starten
Applets in Jar-Archiven
Inhalt
33
26.4
26.4.1
26.4.2
26.4.3
26.4.4
34
1426
Ant
Bezug und Installation von Ant
Properties
Externe und vordefinierte Properties
Weitere Leistungen
1427
1428
1429
1430
26.5
Einpacken von Java-Programmen in ein exe mit JSmooth
26.6
Decompiler
1430
1430
26.6.1
Jad, ein schneller Decompiler
1431
26.6.2
DecompiHeren erschweren
1434
26.7
Obfuscate Programm RetroGuard
1435
26.8
Sourcecode Beautifier
1435
A
Die Begleit-CD
1437
Index
1439
Inhalt
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