ist auch eine Insel - GBV, Gemeinsamer Bibliotheksverbund

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

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

Download PDF

advertisement