Java SE 8 Standard-Bibliothek – Das Handbuch für Java

Transcription

Java SE 8 Standard-Bibliothek – Das Handbuch für Java
Auf einen Blick
Auf einen Blick
1 Neues in Java 8 und Java 7 ..............................................................................................
43
2 Fortgeschrittene String-Verarbeitung ........................................................................
121
3 Threads und nebenläufige Programmierung ...........................................................
177
4 Datenstrukturen und Algorithmen ..............................................................................
275
5 Raum und Zeit .....................................................................................................................
443
6 Dateien, Verzeichnisse und Dateizugriffe .................................................................
509
7 Datenströme ........................................................................................................................
573
8 Die eXtensible Markup Language (XML) ....................................................................
665
9 Dateiformate .......................................................................................................................
749
10 Grafische Oberflächen mit Swing ................................................................................
777
11 Grafikprogrammierung ....................................................................................................
975
12 JavaFX ..................................................................................................................................... 1031
13 Netzwerkprogrammierung ............................................................................................. 1077
14 Verteilte Programmierung mit RMI ............................................................................. 1145
15 RESTful und SOAP-Web-Services .................................................................................. 1165
16 Technologien für die Infrastruktur .............................................................................. 1185
17 Typen, Reflection und Annotationen .......................................................................... 1203
18 Dynamische Übersetzung und Skriptsprachen ....................................................... 1269
19 Logging und Monitoring .................................................................................................. 1293
20 Sicherheitskonzepte .......................................................................................................... 1315
21 Datenbankmanagement mit JDBC .............................................................................. 1337
22 Java Native Interface (JNI) ............................................................................................... 1383
23 Dienstprogramme für die Java-Umgebung .............................................................. 1401
Inhalt
Inhalt
Vorwort ..................................................................................................................................................................
35
1
Neues in Java 8 und Java 7
43
Sprachänderungen in Java 8 .......................................................................................................
43
1.1.1
1.1.2
1.1.3
1.1.4
1.1.5
Statische ausprogrammierte Methoden in Schnittstellen .................................
Default-Methoden ............................................................................................................
Erweiterte Schnittstellen deklarieren und nutzen ................................................
Erweiterte Schnittstellen, Mehrfachvererbung und Mehrdeutigkeiten * .....
Bausteine bilden mit Default-Methoden * ...............................................................
43
44
46
49
53
Lambda-Ausdrücke und funktionale Programmierung ..................................................
59
1.2.1
1.2.2
Code = Daten ......................................................................................................................
Funktionale Schnittstellen und Lambda-Ausdrücke im Detail ..........................
59
62
1.2.3
1.2.4
1.2.5
1.2.6
1.2.7
1.2.8
1.2.9
1.2.10
Methoden-Referenz .........................................................................................................
Konstruktor-Referenz ......................................................................................................
Implementierung von Lambda-Ausdrücken ............................................................
Funktionale Programmierung mit Java .....................................................................
Funktionale Schnittstelle aus dem java.util.function-Paket ..............................
Optional ist keine Nullnummer ...................................................................................
Was ist jetzt so funktional? ...........................................................................................
Zum Weiterlesen ...............................................................................................................
80
83
86
87
91
104
114
116
1.3
Bibliotheksänderungen in Java 8 ..............................................................................................
117
1.4
JDK 8-HotSpot-JVM-Änderungen .............................................................................................
117
1.5
Auf Java 7/8-Syntax mit NetBeans und Eclipse migrieren ............................................
117
1.5.1
1.5.2
1.5.3
Java 8-Syntax-Migration mit NetBeans ....................................................................
Java 8-Syntax-Migration mit Eclipse ..........................................................................
File-Klassen auf NIO.2 umstellen .................................................................................
118
119
119
1.6
Zum Weiterlesen ..............................................................................................................................
120
2
Fortgeschrittene String-Verarbeitung
121
2.1
Erweitere Zeicheneigenschaften ..............................................................................................
121
2.1.1
2.1.2
2.1.3
121
122
122
1.1
1.2
isXXX(….)-Methoden .........................................................................................................
Unicode-Blöcke ..................................................................................................................
Unicode-Skripte .................................................................................................................
5
Inhalt
Inhalt
2.2
2.3
2.4
2.5
Reguläre Ausdrücke .........................................................................................................................
123
2.2.1
2.2.2
2.2.3
2.2.4
2.2.5
2.2.6
2.2.7
2.2.8
124
127
132
134
134
135
137
139
Zerlegen von Zeichenketten ........................................................................................................
140
2.3.1
2.3.2
2.3.3
2.3.4
2.3.5
Zerlegen von Zeichensequenzen über String oder Pattern .................................
Mehr vom Scanner ............................................................................................................
Die Klasse StringTokenizer * ..........................................................................................
BreakIterator als Zeichen-, Wort-, Zeilen- und Satztrenner * .............................
StreamTokenizer * .............................................................................................................
140
141
146
148
151
Zeichenkodierungen, XML/HTML-Entities, Base64 * .......................................................
154
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
154
154
155
156
156
158
Unicode und 8-Bit-Abbildungen ..................................................................................
Kodierungen über die Klasse String vornehmen ....................................................
Das Paket java.nio.charset und der Typ Charset .....................................................
Konvertieren mit OutputStreamWriter-/InputStreamReader-Klassen ..........
XML/HTML-Entities ausmaskieren ..............................................................................
Base64-Kodierung .............................................................................................................
Ausgaben formatieren ...................................................................................................................
159
2.5.1
2.5.2
Die Formatter-Klasse * .....................................................................................................
Formatieren mit Masken * .............................................................................................
159
162
2.5.3
2.5.4
Format-Klassen ..................................................................................................................
Zahlen, Prozente und Währungen mit NumberFormat und
DecimalFormat formatieren * .......................................................................................
MessageFormat und Pluralbildung mit ChoiceFormat ........................................
163
2.5.5
2.6
Pattern.matches(…) bzw. String#matches(…) ..........................................................
Die Klassen Pattern und Matcher ................................................................................
Finden und nicht matchen .............................................................................................
Gruppen ................................................................................................................................
Gierige und nicht gierige Operatoren * ......................................................................
Mit MatchResult alle Ergebnisse einsammeln * .....................................................
Suchen und Ersetzen mit Mustern ..............................................................................
Hangman Version 2 ..........................................................................................................
166
169
Sprachabhängiges Vergleichen und Normalisierung * ....................................................
170
2.6.1
Die Klasse Collator ............................................................................................................
171
2.6.2
2.6.3
Effiziente interne Speicherung für die Sortierung .................................................
Normalisierung ..................................................................................................................
173
174
2.7
Phonetische Vergleiche * ..............................................................................................................
175
2.8
Zum Weiterlesen ..............................................................................................................................
176
6
3
Threads und nebenläufige Programmierung
3.1
Threads erzeugen .............................................................................................................................
177
3.1.1
3.1.2
3.1.3
Threads über die Schnittstelle Runnable implementieren .................................
Thread mit Runnable starten ........................................................................................
Die Klasse Thread erweitern .........................................................................................
177
178
180
Thread-Eigenschaften und -Zustände ....................................................................................
182
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
Der Name eines Threads ................................................................................................
Wer bin ich? ........................................................................................................................
Die Zustände eines Threads * .......................................................................................
Schläfer gesucht ................................................................................................................
Mit yield() auf Rechenzeit verzichten .........................................................................
182
183
183
184
186
3.2.6
3.2.7
3.2.8
3.2.9
3.2.10
3.2.11
3.2.12
3.2.13
Der Thread als Dämon .....................................................................................................
Freiheit für den Thread – das Ende .............................................................................
Einen Thread höflich mit Interrupt beenden ...........................................................
UncaughtExceptionHandler für unbehandelte Ausnahmen .............................
Der stop() von außen und die Rettung mit ThreadDeath * .................................
Ein Rendezvous mit join(…) * .........................................................................................
Arbeit niederlegen und wieder aufnehmen * ..........................................................
Priorität * ..............................................................................................................................
187
189
189
191
192
194
196
196
Der Ausführer (Executor) kommt ..............................................................................................
197
3.3.1
3.3.2
3.3.3
3.3.4
3.3.5
198
199
201
204
3.2
3.3
3.4
Die Schnittstelle Executor ..............................................................................................
Glücklich in der Gruppe – die Thread-Pools .............................................................
Threads mit Rückgabe über Callable ..........................................................................
Mehrere Callable abarbeiten ........................................................................................
ScheduledExecutorService für wiederholende Ausgaben und
Zeitsteuerungen nutzen .................................................................................................
177
205
Synchronisation über kritische Abschnitte ..........................................................................
206
3.4.1
3.4.2
3.4.3
3.4.4
3.4.5
3.4.6
3.4.7
3.4.8
3.4.9
3.4.10
3.4.11
206
206
208
210
211
212
219
220
221
222
223
Gemeinsam genutzte Daten .........................................................................................
Probleme beim gemeinsamen Zugriff und kritische Abschnitte ......................
Punkte nebenläufig initialisieren ................................................................................
i++ sieht atomar aus, ist es aber nicht * ....................................................................
Kritische Abschnitte schützen ......................................................................................
Kritische Abschnitte mit ReentrantLock schützen .................................................
Synchronisieren mit synchronized ..............................................................................
Synchronized-Methoden der Klasse StringBuffer * ...............................................
Mit synchronized synchronisierte Blöcke .................................................................
Dann machen wir doch gleich alles synchronisiert! .............................................
Lock-Freigabe im Fall von Exceptions .........................................................................
7
Inhalt
Inhalt
3.4.12
3.4.13
3.4.14
3.4.15
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13
3.14
8
Deadlocks .............................................................................................................................
Mit synchronized nachträglich synchronisieren * ..................................................
Monitore sind reentrant – gut für die Geschwindigkeit * ...................................
Synchronisierte Methodenaufrufe zusammenfassen * .......................................
224
226
227
228
Synchronisation über Warten und Benachrichtigen ........................................................
229
3.5.1
3.5.2
3.5.3
3.5.4
Die Schnittstelle Condition ............................................................................................
It’s Disco-Time * .................................................................................................................
Warten mit wait(…) und Aufwecken mit notify()/notifyAll() * ...........................
Falls der Lock fehlt – IllegalMonitorStateException * ...........................................
230
233
237
239
Datensynchronisation durch besondere Concurrency-Klassen * ................................
240
3.6.1
3.6.2
3.6.3
241
244
246
Semaphor .............................................................................................................................
Barrier und Austausch .....................................................................................................
Stop and go mit Exchanger ............................................................................................
Atomare Operationen und frische Werte mit volatile * .................................................
246
3.7.1
3.7.2
247
248
Der Modifizierer volatile bei Objekt-/Klassenvariablen .......................................
Das Paket java.util.concurrent.atomic .......................................................................
Teile und herrsche mit Fork und Join * ....................................................................................
250
3.8.1
3.8.2
Algorithmendesign per »teile und herrsche« ..........................................................
Nebenläufiges Lösen von D&C-Algorithmen ...........................................................
250
252
3.8.3
Fork und Join .......................................................................................................................
253
CompletionStage und CompletableFuture * ........................................................................
256
Mit dem Thread verbundene Variablen * ..............................................................................
257
3.10.1
3.10.2
3.10.3
3.10.4
257
259
260
262
ThreadLocal .........................................................................................................................
InheritableThreadLocal ....................................................................................................
ThreadLocalRandom als schneller nebenläufiger Zufallszahlengenerator ...
ThreadLocal bei der Performance-Optimierung .....................................................
Threads in einer Thread-Gruppe * .............................................................................................
263
3.11.1
3.11.2
Aktive Threads in der Umgebung ................................................................................
Etwas über die aktuelle Thread-Gruppe herausfinden ........................................
263
264
3.11.3
3.11.4
Threads in einer Thread-Gruppe anlegen .................................................................
Methoden von Thread und ThreadGroup im Vergleich .......................................
266
269
Zeitgesteuerte Abläufe ..................................................................................................................
270
3.12.1
3.12.2
Die Typen Timer und TimerTask ...................................................................................
Job-Scheduler Quartz .......................................................................................................
271
272
Einen Abbruch der virtuellen Maschine erkennen ............................................................
273
3.13.1
3.13.2
273
274
Shutdown-Hook .................................................................................................................
Signale ...................................................................................................................................
Zum Weiterlesen ..............................................................................................................................
274
4
4.1
4.2
4.3
4.4
4.5
4.6
Datenstrukturen und Algorithmen
275
Datenstrukturen und die Collection-API ...............................................................................
275
4.1.1
4.1.2
4.1.3
4.1.4
4.1.5
4.1.6
4.1.7
4.1.8
4.1.9
276
276
277
277
278
282
284
285
286
Designprinzip mit Schnittstellen, abstrakten und konkreten Klassen ...........
Die Basisschnittstellen Collection und Map ............................................................
Die Utility-Klassen Collections und Arrays ...............................................................
Das erste Programm mit Container-Klassen ...........................................................
Die Schnittstelle Collection und Kernkonzepte ......................................................
Schnittstellen, die Collection erweitern, und Map ................................................
Konkrete Container-Klassen ..........................................................................................
Generische Datentypen in der Collection-API .........................................................
Die Schnittstelle Iterable und das erweiterte for ...................................................
Listen ......................................................................................................................................................
287
4.2.1
4.2.2
Erstes Listen-Beispiel .......................................................................................................
Auswahlkriterium ArrayList oder LinkedList ............................................................
287
288
4.2.3
4.2.4
4.2.5
4.2.6
4.2.7
4.2.8
4.2.9
Die Schnittstelle List ........................................................................................................
ArrayList ...............................................................................................................................
LinkedList .............................................................................................................................
Der Feld-Adapter Arrays.asList(…) ................................................................................
ListIterator * ........................................................................................................................
toArray(…) von Collection verstehen – die Gefahr einer Falle erkennen ........
Primitive Elemente in Datenstrukturen verwalten ...............................................
289
295
296
298
300
301
304
Mengen (Sets) ....................................................................................................................................
305
4.3.1
4.3.2
4.3.3
4.3.4
4.3.5
4.3.6
Ein erstes Mengen-Beispiel ...........................................................................................
Methoden der Schnittstelle Set ...................................................................................
HashSet ................................................................................................................................
TreeSet – die sortierte Menge ......................................................................................
Die Schnittstellen NavigableSet und SortedSet .....................................................
LinkedHashSet ...................................................................................................................
305
307
309
309
311
313
Queues (Schlangen) und Deques ..............................................................................................
314
4.4.1
4.4.2
4.4.3
4.4.4
Queue-Klassen ...................................................................................................................
Deque-Klassen ...................................................................................................................
Blockierende Queues und Prioritätswarteschlangen ...........................................
PriorityQueue .....................................................................................................................
315
316
317
318
Stack (Kellerspeicher, Stapel) .....................................................................................................
323
4.5.1
Die Methoden von java.util.Stack ................................................................................
324
Assoziative Speicher .......................................................................................................................
325
4.6.1
Die Klassen HashMap und TreeMap ..........................................................................
325
4.6.2
Einfügen und Abfragen des Assoziativspeichers ...................................................
327
9
Inhalt
Inhalt
4.6.3
4.6.4
4.6.5
4.6.6
4.6.7
4.6.8
4.6.9
4.6.10
Über die Bedeutung von equals(…) und hashCode() bei Elementen ................
Eigene Objekte hashen ....................................................................................................
LinkedHashMap und LRU-Implementierungen ......................................................
IdentityHashMap ...............................................................................................................
Das Problem veränderter Elemente ............................................................................
Aufzählungen und Ansichten des Assoziativspeichers ........................................
Die Arbeitsweise einer Hash-Tabelle * .......................................................................
Die Properties-Klasse .......................................................................................................
334
335
336
337
338
338
342
344
4.7
Mit einem Iterator durch die Daten wandern .....................................................................
348
4.8
Iterator-Schnittstelle ......................................................................................................................
348
4.8.1
4.8.2
4.8.3
4.8.4
4.8.5
4.8.6
4.9
4.10
10
Der Iterator kann (eventuell auch) löschen ..............................................................
Operationen auf allen Elementen durchführen .....................................................
Einen Zufallszahlen-Iterator schreiben ......................................................................
Iteratoren von Sammlungen, das erweiterte for und Iterable ...........................
Fail-Fast-Iterator und die ConcurrentModificationException ............................
Die Schnittstelle Enumerator * .....................................................................................
349
349
350
351
355
356
Algorithmen in Collections ..........................................................................................................
358
4.9.1
4.9.2
4.9.3
4.9.4
4.9.5
4.9.6
4.9.7
4.9.8
4.9.9
4.9.10
4.9.11
4.9.12
Die Bedeutung von Ordnung mit Comparator und Comparable ......................
Sortieren ...............................................................................................................................
Den größten und kleinsten Wert einer Collection finden ...................................
Nichtänderbare Datenstrukturen, immutable oder nur lesen? ........................
Null Object Pattern und leere Sammlungen/Iteratoren zurückgeben ...........
Echte typsichere Container ............................................................................................
Mit der Halbierungssuche nach Elementen fahnden ...........................................
Ersetzen, Kopieren, Füllen, Umdrehen, Rotieren * ..................................................
Listen durchwürfeln * .......................................................................................................
Häufigkeit eines Elements * ...........................................................................................
Singletons * ..........................................................................................................................
nCopies(…) * .........................................................................................................................
359
360
363
365
369
372
373
375
376
377
378
378
Datenstrukturen mit Änderungsmeldungen .......................................................................
379
4.10.1
4.10.2
4.10.3
4.10.4
4.10.5
4.10.6
4.10.7
4.10.8
4.10.9
379
380
382
382
383
385
386
387
388
Das Paket javafx.collections ..........................................................................................
Fabrikmethoden in FXCollections ................................................................................
Änderungen melden über InvalidationListener ......................................................
Änderungen melden über XXXChangeListener ......................................................
Change-Klassen .................................................................................................................
Weitere Hilfsmethoden einer ObservableList .........................................................
Melden von Änderungen an Arrays .............................................................................
Transformierte FXCollections ........................................................................................
Weitere statische Methoden in FXCollections ........................................................
4.11
4.12
4.13
Stream-API ..........................................................................................................................................
389
4.11.1
4.11.2
4.11.3
4.11.4
4.11.5
4.11.6
4.11.7
4.11.8
Stream erzeugen ...............................................................................................................
Terminale Operationen ...................................................................................................
Intermediäre Operationen .............................................................................................
Streams mit primitiven Werten ...................................................................................
Stream-Beziehungen, AutoCloseable ........................................................................
Stream-Builder ...................................................................................................................
Spliterator ............................................................................................................................
Klasse StreamSupport .....................................................................................................
391
393
404
408
419
421
422
422
Spezielle threadsichere Datenstrukturen .............................................................................
423
4.12.1
4.12.2
4.12.3
4.12.4
4.12.5
4.12.6
Zu Beginn nur synchronisierte Datenstrukturen in Java 1.0 ...............................
Nicht synchronisierte Datenstrukturen in der Standard-Collection-API .......
Nebenläufiger Assoziativspeicher und die Schnittstelle ConcurrentMap .....
ConcurrentLinkedQueue ................................................................................................
CopyOnWriteArrayList und CopyOnWriteArraySet ...............................................
Wrapper zur Synchronisation .......................................................................................
423
423
424
424
424
425
4.12.7
4.12.8
4.12.9
4.12.10
Blockierende Warteschlangen ......................................................................................
ArrayBlockingQueue und LinkedBlockingQueue ....................................................
PriorityBlockingQueue ....................................................................................................
Transfer-Warteschlangen – TransferQueue und LinkedTransferQueue .......
426
427
428
432
Google Guava (Google Collections Library) ..........................................................................
432
4.13.1
4.13.2
4.13.3
4.13.4
4.13.5
Beispiel Multi-Set und Multi-Map ...............................................................................
Datenstrukturen aus Guava ..........................................................................................
Utility-Klassen von Guava ..............................................................................................
Prädikate ..............................................................................................................................
Transformationen .............................................................................................................
433
433
436
436
437
Die Klasse BitSet für Bitmengen * ............................................................................................
437
4.14.1
4.14.2
Ein BitSet anlegen .............................................................................................................
BitSet füllen und Zustände erfragen ..........................................................................
438
439
4.14.3
4.14.4
4.14.5
Mengenorientierte Operationen .................................................................................
Weitere Methoden von BitSet ......................................................................................
Primzahlen in einem BitSet verwalten ......................................................................
440
441
442
4.15
Zum Weiterlesen ..............................................................................................................................
442
5
Raum und Zeit
443
5.1
Weltzeit * .............................................................................................................................................
443
5.2
Wichtige Datum-Klassen im Überblick ..................................................................................
444
5.2.1
445
4.14
Der 1.1.1970 ..........................................................................................................................
11
Inhalt
Inhalt
5.2.2
5.2.3
5.3
5.4
5.5
5.6
5.7
5.8
5.9
12
System.currentTimeMillis() ............................................................................................
Einfache Zeitumrechnungen durch TimeUnit .........................................................
445
445
5.9.8
5.9.9
5.9.10
5.9.11
5.9.12
5.9.13
5.9.14
5.9.15
Klasse Year ...........................................................................................................................
Zeitzonen-Klassen ZoneId und ZoneOffset ..............................................................
Temporale Klassen mit Zeitzoneninformationen ..................................................
Klassen Period und Duration ........................................................................................
Klasse Instant .....................................................................................................................
Parsen und Formatieren von Datumszeitwerten ..................................................
Das Paket java.time.temporal * ....................................................................................
Konvertierungen zwischen der klassischen API und Date-Time-API ...............
492
492
493
497
499
500
500
505
5.10
Die Default-Falle ...............................................................................................................................
506
5.11
Zum Weiterlesen ..............................................................................................................................
507
Sprachen der Länder ........................................................................................................................
446
5.3.1
Sprachen und Regionen über Locale-Objekte ..........................................................
447
Internationalisierung und Lokalisierung ...............................................................................
449
5.4.1
5.4.2
5.4.3
5.4.4
5.4.5
ResourceBundle-Objekte und Ressource-Dateien .................................................
Ressource-Dateien zur Lokalisierung ..........................................................................
Die Klasse ResourceBundle ............................................................................................
Ladestrategie für ResourceBundle-Objekte ..............................................................
Ladeprozess und Format anpassen * ..........................................................................
450
450
452
452
453
Die Klasse Date ..................................................................................................................................
455
5.5.1
5.5.2
Objekte erzeugen und Methoden nutzen .................................................................
Date-Objekte sind nicht immutable ...........................................................................
455
457
6
Dateien, Verzeichnisse und Dateizugriffe
509
Calendar und GregorianCalendar .............................................................................................
457
6.1
Alte und neue Welt in java.io und java.nio ..........................................................................
509
5.6.1
5.6.2
Die abstrakte Klasse Calendar ......................................................................................
Calendar nach Date und Millisekunden fragen ......................................................
458
459
6.1.1
6.1.2
java.io-Paket mit File-Klasse ..........................................................................................
NIO.2 und java.nio-Paket ................................................................................................
509
510
5.6.3
5.6.4
5.6.5
5.6.6
5.6.7
5.6.8
Abfragen und Setzen von Datumselementen über Feldbezeichner ................
Kalender-Typen * ...............................................................................................................
Kalender-Exemplare bauen über den Calendar.Builder .......................................
Wie viele Tage hat der Monat, oder wie viele Monate hat ein Jahr? * ............
Wann beginnt die Woche und wann die erste Woche im Jahr? * .....................
Der gregorianische Kalender .........................................................................................
459
463
463
464
465
467
Dateisysteme und Pfade ...............................................................................................................
510
6.2.1
6.2.2
6.2.3
6.2.4
6.2.5
510
516
518
520
Zeitzonen in Java * ...........................................................................................................................
470
5.7.1
5.7.2
5.7.3
Zeitzonen durch die Klasse TimeZone repräsentieren .........................................
SimpleTimeZone ................................................................................................................
Methoden von TimeZone ...............................................................................................
470
471
473
FileSystem und Path ........................................................................................................
Die Utility-Klasse Files .....................................................................................................
Dateien kopieren und verschieben .............................................................................
Dateiattribute * ..................................................................................................................
Neue Dateien, Verzeichnisse, symbolische Verknüpfungen anlegen
und löschen .........................................................................................................................
MIME-Typen herausfinden * .........................................................................................
Verzeichnislistings (DirectoryStream/Stream) und Filter * ................................
Rekursives Ablaufen des Verzeichnisbaums * .........................................................
Rekursiv nach Dateien/Ordnern suchen mit Files.find(…) * ................................
Dateisysteme und Dateisystemattribute * ..............................................................
Verzeichnisse im Dateisystem überwachen * .........................................................
539
543
6.2
Formatieren und Parsen von Datumsangaben ...................................................................
474
6.2.6
6.2.7
6.2.8
6.2.9
5.8.1
5.8.2
Ausgaben mit printf(…) ...................................................................................................
Ausgaben mit Calendar-Methoden getDisplayName(…) * ..................................
474
475
6.2.10
6.2.11
5.8.3
5.8.4
Mit DateFormat und SimpleDateFormat formatieren .........................................
Parsen von Datumswerten ............................................................................................
475
481
Date-Time-API in Java 8 .................................................................................................................
483
5.9.1
5.9.2
5.9.3
5.9.4
5.9.5
5.9.6
5.9.7
487
488
489
490
490
491
491
Datumsklasse LocalDate .................................................................................................
Ostertage * ...........................................................................................................................
Die Klasse YearMonth ......................................................................................................
Die Klasse MonthDay .......................................................................................................
Aufzählung DayOfWeek und Month ..........................................................................
Klasse LocalTime ................................................................................................................
Klasse LocalDateTime ......................................................................................................
6.3
529
531
532
535
538
Datei- und Verzeichnis-Operationen mit der Klasse File ...............................................
545
6.3.1
6.3.2
6.3.3
6.3.4
6.3.5
6.3.6
6.3.7
6.3.8
6.3.9
545
549
549
552
552
556
557
558
561
Dateien und Verzeichnisse mit der Klasse File .......................................................
Verzeichnis oder Datei? Existiert es? ..........................................................................
Verzeichnis- und Dateieigenschaften/-attribute ..................................................
Umbenennen und Verzeichnisse anlegen ................................................................
Verzeichnisse auflisten und Dateien filtern ............................................................
Dateien berühren, neue Dateien anlegen, temporäre Dateien ........................
Dateien und Verzeichnisse löschen ............................................................................
Wurzelverzeichnis, Laufwerksnamen, Plattenspeicher * ....................................
URL-, URI- und Path-Objekte aus einem File-Objekt ableiten * .........................
13
Inhalt
Inhalt
6.3.10
6.3.11
6.3.12
6.4
6.5
Mit Locking Dateien sperren * .......................................................................................
Sicherheitsprüfung * ........................................................................................................
Zugriff auf SMB-Server mit jCIFS * ...............................................................................
561
563
563
Dateien mit wahlfreiem Zugriff .................................................................................................
563
6.4.1
Ein RandomAccessFile zum Lesen und Schreiben öffnen ....................................
564
6.4.2
6.4.3
6.4.4
6.4.5
Aus dem RandomAccessFile lesen ...............................................................................
Schreiben mit RandomAccessFile ................................................................................
Die Länge des RandomAccessFile ................................................................................
Hin und her in der Datei ..................................................................................................
565
567
567
568
Wahlfreier Zugriff mit SeekableByteChannel und ByteBuffer * .................................
569
6.5.1
6.5.2
6.5.3
6.5.4
SeekableByteChannel ......................................................................................................
ByteBuffer ............................................................................................................................
Beispiel mit Path + SeekableByteChannel + ByteBuffer .......................................
FileChannel ..........................................................................................................................
569
570
570
571
6.6
Zum Weiterlesen ..............................................................................................................................
572
7
Datenströme
573
7.1
7.2
7.3
14
7.4
7.5
7.6
Stream-Klassen für Bytes und Zeichen ...................................................................................
573
7.1.1
7.1.2
7.1.3
Lesen aus Dateien und Schreiben in Dateien ..........................................................
Byteorientierte Datenströme über Files beziehen .................................................
Zeichenorientierte Datenströme über Files beziehen ..........................................
574
574
575
7.1.4
7.1.5
7.1.6
Funktion von OpenOption bei den Files.newXXX(…)-Methoden .......................
Ressourcen aus dem Klassenpfad und aus JAR-Archiven laden ........................
Die Schnittstellen Closeable, AutoCloseable und Flushable ..............................
576
578
579
7.7
Basisklassen für die Ein-/Ausgabe ............................................................................................
581
7.8
7.2.1
7.2.2
7.2.3
7.2.4
7.2.5
7.2.6
7.2.7
7.2.8
7.2.9
Die abstrakten Basisklassen ..........................................................................................
Übersicht über Ein-/Ausgabeklassen .........................................................................
Die abstrakte Basisklasse OutputStream ..................................................................
Ein Datenschlucker * .........................................................................................................
Die abstrakte Basisklasse InputStream ......................................................................
Ströme mit SequenceInputStream zusammensetzen * .......................................
Die abstrakte Basisklasse Writer ..................................................................................
Die Schnittstelle Appendable * .....................................................................................
Die abstrakte Basisklasse Reader .................................................................................
581
581
584
585
586
587
589
591
591
Formatierte Textausgaben ...........................................................................................................
594
7.3.1
7.3.2
594
600
Die Klassen PrintWriter und PrintStream .................................................................
System.out, System.err und System.in .......................................................................
7.9
7.10
Die FileXXX-Stromklassen ...........................................................................................................
602
7.4.1
7.4.2
7.4.3
7.4.4
Kopieren mit FileOutputStream und FileInputStream .........................................
Das FileDescriptor-Objekt * ...........................................................................................
Mit dem FileWriter Texte in Dateien schreiben .....................................................
Zeichen mit der Klasse FileReader lesen ...................................................................
603
606
607
608
Schreiben und Lesen aus Strings und Byte-Feldern ..........................................................
609
7.5.1
7.5.2
7.5.3
7.5.4
7.5.5
Mit dem StringWriter ein String-Objekt füllen .......................................................
CharArrayWriter ................................................................................................................
StringReader und CharArrayReader ............................................................................
Mit ByteArrayOutputStream in ein Byte-Feld schreiben .....................................
Mit ByteArrayInputStream aus einem Byte-Feld lesen ........................................
609
610
611
612
613
Datenströme filtern und verketten .........................................................................................
614
7.6.1
7.6.2
Streams als Filter verketten (verschachteln) ...........................................................
Gepufferte Ausgaben mit BufferedWriter und BufferedOutputStream .......
615
616
7.6.3
7.6.4
7.6.5
7.6.6
7.6.7
7.6.8
7.6.9
7.6.10
7.6.11
Gepufferte Eingaben mit BufferedReader/BufferedInputStream ...................
LineNumberReader zählt automatisch Zeilen mit * ..............................................
Daten mit der Klasse PushbackReader zurücklegen * ..........................................
DataOutputStream/DataInputStream * ...................................................................
Basisklassen für Filter * ...................................................................................................
Die Basisklasse FilterWriter * ........................................................................................
Ein LowerCaseWriter * .....................................................................................................
Eingaben mit der Klasse FilterReader filtern * .........................................................
Anwendungen für FilterReader und FilterWriter * ................................................
618
619
620
623
623
624
625
626
627
Vermittler zwischen Byte-Streams und Unicode-Strömen ...........................................
633
7.7.1
7.7.2
Datenkonvertierung durch den OutputStreamWriter .........................................
Automatische Konvertierungen mit dem InputStreamReader .........................
633
634
Kommunikation zwischen Threads mit Pipes * ..................................................................
636
7.8.1
7.8.2
636
638
PipedOutputStream und PipedInputStream ...........................................................
PipedWriter und PipedReader ......................................................................................
Prüfsummen .......................................................................................................................................
640
7.9.1
7.9.2
7.9.3
640
641
643
Die Schnittstelle Checksum ...........................................................................................
Die Klasse CRC32 ...............................................................................................................
Die Adler32-Klasse ............................................................................................................
Persistente Objekte und Serialisierung ..................................................................................
643
7.10.1
7.10.2
Objekte mit der Standardserialisierung speichern und lesen ...........................
Zwei einfache Anwendungen der Serialisierung * .................................................
644
647
7.10.3
7.10.4
7.10.5
Die Schnittstelle Serializable .........................................................................................
Nicht serialisierbare Attribute aussparen ................................................................
Das Abspeichern selbst in die Hand nehmen ..........................................................
648
650
652
15
Inhalt
Inhalt
7.10.6
7.10.7
7.10.8
7.10.9
8.5
Serielle Verarbeitung mit StAX ..................................................................................................
704
8.5.1
8.5.2
8.5.3
8.5.4
8.5.5
704
706
709
712
713
Tiefe Objektkopien * .........................................................................................................
Versionenverwaltung und die SUID ............................................................................
Wie die ArrayList serialisiert * ........................................................................................
Probleme mit der Serialisierung ...................................................................................
655
657
659
660
Alternative Datenaustauschformate ......................................................................................
661
7.11.1
7.11.2
7.11.3
7.11.4
Serialisieren in XML-Dateien .........................................................................................
XML-Serialisierung von JavaBeans mit JavaBeans Persistence * .......................
Die Open-Source-Bibliothek XStream * ......................................................................
Binäre Serialisierung mit Google Protocol Buffers * ..............................................
661
661
663
664
7.12
Zum Weiterlesen ..............................................................................................................................
664
8
Die eXtensible Markup Language (XML)
XML-Dateien mit JDOM verarbeiten .......................................................................................
721
665
8.7.1
8.7.2
JDOM beziehen ..................................................................................................................
Paketübersicht * ................................................................................................................
721
722
8.1
Auszeichnungssprachen ................................................................................................................
665
8.1.1
8.1.2
665
666
8.7.3
8.7.4
8.7.5
8.7.6
8.7.7
8.7.8
8.7.9
8.7.10
8.7.11
8.7.12
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 .....................................................................................................................................
723
724
725
726
727
730
732
732
735
738
Transformationen mit XSLT * .....................................................................................................
742
8.8.1
8.8.2
742
744
7.11
8.2
8.3
8.4
16
Die Standard Generalized Markup Language (SGML) ...........................................
Extensible Markup Language (XML) ...........................................................................
8.7
Eigenschaften von XML-Dokumenten ....................................................................................
666
8.2.1
8.2.2
8.2.3
8.2.4
8.2.5
Elemente und Attribute ..................................................................................................
Beschreibungssprache für den Aufbau von XML-Dokumenten ........................
Schema – die moderne Alternative zu DTD ..............................................................
Namensraum (Namespace) ...........................................................................................
XML-Applikationen * ........................................................................................................
666
669
673
675
676
Die Java-APIs für XML .....................................................................................................................
677
8.3.1
8.3.2
8.3.3
8.3.4
8.3.5
8.3.6
Das Document Object Model (DOM) ..........................................................................
Simple API for XML Parsing (SAX) .................................................................................
Pull-API StAX .......................................................................................................................
Java Document Object Model (JDOM) .......................................................................
JAXP als Java-Schnittstelle zu XML ..............................................................................
DOM-Bäume einlesen mit JAXP * .................................................................................
678
678
678
678
679
680
Java Architecture for XML Binding (JAXB) .............................................................................
680
8.4.1
8.4.2
8.4.3
8.4.4
8.4.5
8.4.6
8.4.7
680
681
682
684
686
690
697
Bean für JAXB aufbauen ..................................................................................................
Utility-Klasse JAXB ............................................................................................................
Ganze Objektgraphen schreiben und lesen .............................................................
JAXBContext und Marshaller/Unmarshaller nutzen ............................................
Validierung ..........................................................................................................................
Weitere JAXB-Annotationen * .......................................................................................
Beans aus XML-Schema-Datei generieren ................................................................
8.6
8.8
8.9
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 * .............................................................................
716
8.6.1
8.6.2
8.6.3
8.6.4
716
717
718
720
Schnittstellen von SAX ....................................................................................................
SAX-Parser erzeugen ........................................................................................................
Operationen der Schnittstelle ContentHandler .....................................................
ErrorHandler und EntityResolver .................................................................................
Templates und XPath als Kernelemente von XSLT ................................................
Umwandlung von XML-Dateien mit JDOM und JAXP ..........................................
XML-Schema-Validierung * .........................................................................................................
745
8.9.1
8.9.2
SchemaFactory und Schema .........................................................................................
Validator ..............................................................................................................................
745
745
8.9.3
Validierung unterschiedlicher Datenquellen durchführen ................................
746
8.10
Zum Weiterlesen ..............................................................................................................................
747
9
Dateiformate
749
9.1
Einfache Dateiformate für strukturierte Daten .................................................................
750
9.1.1
750
Property-Dateien mit java.util.Properties lesen und schreiben ........................
17
Inhalt
Inhalt
9.1.2
9.1.3
9.2
9.3
9.4
9.5
CSV-Dateien ........................................................................................................................
JSON-Serialisierung mit Jackson ..................................................................................
752
754
Dokumentenformate ......................................................................................................................
755
9.2.1
9.2.2
(X)HTML ................................................................................................................................
PDF-Dokumente .................................................................................................................
756
757
9.2.3
9.2.4
Microsoft Office-Dokumente ........................................................................................
OASIS Open Document Format ....................................................................................
757
759
10.4
Datenkompression * ........................................................................................................................
759
10.5
9.3.1
9.3.2
9.3.3
9.3.4
9.3.5
Java-Unterstützung beim Komprimieren .................................................................
Daten packen und entpacken .......................................................................................
Datenströme komprimieren ..........................................................................................
ZIP-Archive ...........................................................................................................................
JAR-Archive ..........................................................................................................................
760
761
763
766
772
Bildformate .........................................................................................................................................
772
Audiodateien ......................................................................................................................................
773
9.5.1
9.5.2
9.5.3
9.5.4
773
773
774
776
Die Arbeit mit Applets AudioClip .................................................................................
AudioClip von JavaFX .......................................................................................................
MIDI-Dateien abspielen ..................................................................................................
ID-Tags aus mp3-Dateien ...............................................................................................
10 Grafische Oberflächen mit Swing
777
10.1
AWT, JavaFoundation Classes und Swing .............................................................................
777
10.1.1
10.1.2
10.1.3
777
778
781
10.2
10.3
18
10.3.5
10.3.6
10.3.7
10.3.8
10.3.9
Das Abstract Window Toolkit (AWT) ..........................................................................
Java Foundation Classes (JFC) .......................................................................................
Was Swing von AWT-Komponenten unterscheidet ..............................................
Mit NetBeans zur ersten Swing-Oberfläche .........................................................................
782
10.2.1
10.2.2
Projekt anlegen ..................................................................................................................
Eine GUI-Klasse hinzufügen ..........................................................................................
782
784
10.2.3
10.2.4
10.2.5
10.2.6
Programm starten .............................................................................................................
Grafische Oberfläche aufbauen ...................................................................................
Swing-Komponenten-Klassen ......................................................................................
Funktionalität geben ........................................................................................................
786
786
788
790
Aller Swing-Anfang – Fenster zur Welt ..................................................................................
793
10.3.1
10.3.2
10.3.3
10.3.4
793
794
795
795
Eine Uhr, bei der die Zeit nie vergeht ..........................................................................
Swing-Fenster mit javax.swing.JFrame darstellen ................................................
Mit add(…) auf den Container .......................................................................................
Fenster schließbar machen – setDefaultCloseOperation(int) ...........................
Sichtbarkeit des Fensters ...............................................................................................
Größe und Position des Fensters verändern ............................................................
Fenster- und Dialogdekoration, Transparenz * .......................................................
Die Klasse Toolkit * ...........................................................................................................
Zum Vergleich: AWT-Fenster darstellen * ................................................................
796
796
797
798
799
Beschriftungen (JLabel) .................................................................................................................
800
10.4.1
803
Mehrzeiliger Text, HTML in der Darstellung ............................................................
Icon und ImageIcon für Bilder auf Swing-Komponenten ..............................................
804
10.5.1
Die Klasse ImageIcon .......................................................................................................
804
Es tut sich was – Ereignisse beim AWT ...................................................................................
806
10.6.1
10.6.2
10.6.3
10.6.4
10.6.5
10.6.6
10.6.7
Die Ereignisquellen und Horcher (Listener) von Swing ........................................
Listener implementieren ................................................................................................
Listener bei dem Ereignisauslöser anmelden/abmelden ....................................
Adapterklassen nutzen ...................................................................................................
Innere Mitgliedsklassen und innere anonyme Klassen .......................................
Aufrufen der Listener im AWT-Event-Thread ..........................................................
Ereignisse, etwas genauer betrachtet * .....................................................................
806
807
810
812
814
816
816
Schaltflächen .....................................................................................................................................
819
10.7.1
10.7.2
Normale Schaltflächen (JButton) ................................................................................
Der aufmerksame ActionListener ................................................................................
819
822
10.7.3
10.7.4
10.7.5
Schaltflächen-Ereignisse vom Typ ActionEvent .....................................................
Basisklasse AbstractButton ...........................................................................................
Wechselknopf (JToggleButton) ....................................................................................
823
823
825
Textkomponenten ...........................................................................................................................
825
10.8.1
10.8.2
10.8.3
10.8.4
10.8.5
10.8.6
Text in einer Eingabezeile ..............................................................................................
Die Oberklasse der Textkomponenten (JTextComponent) ................................
Geschützte Eingaben (JPasswordField) .....................................................................
Validierende Eingabefelder (JFormattedTextField) ...............................................
Einfache mehrzeilige Textfelder (JTextArea) ...........................................................
Editor-Klasse (JEditorPane) * .........................................................................................
826
827
829
829
831
833
Swing Action * ...................................................................................................................................
836
10.10 JComponent und Component als Basis aller Komponenten ........................................
838
10.6
10.7
10.8
10.9
10.10.1
10.10.2
10.10.3
10.10.4
10.10.5
10.10.6
10.10.7
Hinzufügen von Komponenten ....................................................................................
Tooltips (Kurzhinweise) ..................................................................................................
Rahmen (Border) * .............................................................................................................
Fokus und Navigation * ...................................................................................................
Ereignisse jeder Komponente * ....................................................................................
Die Größe und Position einer Komponente * ..........................................................
Komponenten-Ereignisse * ............................................................................................
838
839
840
842
844
847
848
19
Inhalt
Inhalt
10.10.8 UI-Delegate – der wahre Zeichner * ............................................................................
10.10.9 Undurchsichtige (opake) Komponente * ...................................................................
10.10.10Properties und Listener für Änderungen * ................................................................
848
851
852
10.11 Container ..............................................................................................................................................
852
10.11.1 Standardcontainer (JPanel) ............................................................................................
852
10.11.2 Bereich mit automatischen Rollbalken (JScrollPane) ............................................
10.11.3 Reiter (JTabbedPane) ........................................................................................................
10.11.4 Teilungskomponente (JSplitPane) ...............................................................................
853
853
855
10.12 Alles Auslegungssache – die Layoutmanager .....................................................................
855
10.12.1
10.12.2
10.12.3
10.12.4
10.12.5
10.12.6
10.12.7
10.12.8
10.12.9
Übersicht über Layoutmanager ....................................................................................
Zuweisen eines Layoutmanagers ................................................................................
Im Fluss mit FlowLayout .................................................................................................
BoxLayout ............................................................................................................................
Mit BorderLayout in alle Himmelsrichtungen .........................................................
Rasteranordnung mit GridLayout ................................................................................
Der GridBagLayoutmanager * .......................................................................................
Null-Layout * .......................................................................................................................
Weitere Layoutmanager .................................................................................................
856
856
857
859
860
862
864
869
869
10.13 Rollbalken und Schieberegler .....................................................................................................
870
10.13.1 Schieberegler (JSlider) ......................................................................................................
10.13.2 Rollbalken (JScrollBar) * ...................................................................................................
870
871
10.14 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen ........................................................
875
10.14.1 Kontrollfelder (JCheckBox) .............................................................................................
10.14.2 ItemSelectable, ItemListener und das ItemEvent ...................................................
10.14.3 Sich gegenseitig ausschließende Optionen (JRadioButton) ...............................
876
878
879
10.15 Fortschritte bei Operationen überwachen * .........................................................................
881
10.15.1 Fortschrittsbalken (JProgressBar) ................................................................................
10.15.2 Dialog mit Fortschrittsanzeige (ProgressMonitor) ................................................
881
883
10.16 Menüs und Symbolleisten ............................................................................................................
883
10.16.1 Die Menüleisten und die Einträge ...............................................................................
884
10.16.2
10.16.3
10.16.4
10.16.5
10.16.6
10.16.7
10.16.8
10.16.9
885
887
888
888
890
891
894
898
20
Menüeinträge definieren ...............................................................................................
Einträge durch Action-Objekte beschreiben ............................................................
Mit der Tastatur – Mnemonics und Shortcut ..........................................................
Der Tastatur-Shortcut (Accelerator) ...........................................................................
Tastenkürzel (Mnemonics) .............................................................................................
Symbolleisten alias Toolbars .........................................................................................
Popup-Menüs .....................................................................................................................
System-Tray nutzen * .......................................................................................................
10.17 Das Model-View-Controller-Konzept .....................................................................................
899
10.18 Auswahlmenüs, Listen und Spinner ........................................................................................
901
10.18.1
10.18.2
10.18.3
10.18.4
Listen (JList) .........................................................................................................................
Auswahlmenü (JComboBox) .........................................................................................
Drehfeld (JSpinner) * ........................................................................................................
Datumsauswahl ................................................................................................................
10.19 Tabellen (JTable) ...............................................................................................................................
10.19.1
10.19.2
10.19.3
10.19.4
10.19.5
10.19.6
901
908
913
914
915
Ein eigenes Tabellen-Model ..........................................................................................
Basisklasse für eigene Modelle (AbstractTableModel) ........................................
Ein vorgefertigtes Standardmodell (DefaultTableModel) ...................................
Ein eigener Renderer für Tabellen ...............................................................................
Zell-Editoren .......................................................................................................................
Automatisches Sortieren und Filtern mit RowSorter * .........................................
916
917
920
922
925
926
10.20 Bäume (JTree) ....................................................................................................................................
929
10.20.1 JTree und sein TreeModel und TreeNode .................................................................
10.20.2 Selektionen bemerken ....................................................................................................
10.20.3 Das TreeModel von JTree * .............................................................................................
929
931
931
10.21 JRootPane und JDesktopPane * .................................................................................................
934
10.21.1 Wurzelkomponente der Top-Level-Komponenten (JRootPane) ........................
10.21.2 JDesktopPane und die Kinder von JInternalFrame ................................................
934
935
10.21.3 JLayeredPane ......................................................................................................................
937
10.22 Dialoge und Window-Objekte ...................................................................................................
937
10.22.1 JWindow und JDialog ......................................................................................................
10.22.2 Modal oder nichtmodal? ................................................................................................
938
938
10.22.3 Standarddialoge mit JOptionPane ..............................................................................
10.22.4 Der Dateiauswahldialog .................................................................................................
10.22.5 Der Farbauswahldialog JColorChooser * ...................................................................
939
942
945
10.23 Flexibles Java-Look-and-Feel ......................................................................................................
947
10.23.1 Look-and-Feel global setzen ..........................................................................................
10.23.2 UIManager ..........................................................................................................................
10.23.3 Die Windows-Optik mit JGoodies Looks verbessern * ..........................................
948
948
950
10.24 Swing-Komponenten neu erstellen oder verändern * ....................................................
951
10.24.1 Überlagerungen mit dem Swing-Komponenten-Dekorator JLayer .................
952
10.25 Die Zwischenablage (Clipboard) ...............................................................................................
953
10.25.1 Clipboard-Objekte ............................................................................................................
10.25.2 Mit Transferable auf den Inhalt zugreifen ...............................................................
10.25.3 DataFlavor ist das Format der Daten in der Zwischenablage ............................
953
954
955
21
Inhalt
Inhalt
10.25.4 Einfügungen in der Zwischenablage erkennen ......................................................
10.25.5 Drag & Drop ........................................................................................................................
957
957
10.26 Undo durchführen * .........................................................................................................................
958
10.27 AWT, Swing und die Threads ......................................................................................................
960
10.27.1 Ereignisschlange (EventQueue) und AWT-Event-Thread ....................................
960
10.27.2
10.27.3
10.27.4
10.27.5
10.27.6
Swing ist nicht threadsicher ..........................................................................................
invokeLater(…) und invokeAndWait(…) ......................................................................
SwingWorker ......................................................................................................................
Eigene Ereignisse in die Queue setzen * ....................................................................
Auf alle Ereignisse hören * ..............................................................................................
961
963
965
967
968
10.28 Barrierefreiheit mit der Java Accessibility API .....................................................................
968
10.29 Zeitliches Ausführen mit dem javax.swing.Timer .............................................................
969
10.30 Die Zusatzkomponentenbibliothek SwingX ........................................................................
970
10.30.1
10.30.2
10.30.3
10.30.4
10.30.5
Im Angebot: Erweiterte und neue Swing-Komponenten ....................................
Überblick über erweiterte Standard-Swing-Klassen .............................................
Neue Swing-Klassen .........................................................................................................
Weitere SwingX-Klassen .................................................................................................
SwingX-Installation ..........................................................................................................
970
971
972
973
973
10.31 Zum Weiterlesen ..............................................................................................................................
973
11 Grafikprogrammierung
975
11.1
Grundlegendes zum Zeichnen ....................................................................................................
975
11.1.1
11.1.2
11.1.3
11.1.4
11.1.5
Die paint(Graphics)-Methode für das AWT-Frame ................................................
Die ereignisorientierte Programmierung ändert Fensterinhalte ......................
Zeichnen von Inhalten auf ein JFrame .......................................................................
Auffordern zum Neuzeichnen mit repaint(…) .........................................................
Java 2D-API ..........................................................................................................................
975
977
978
979
980
Einfache Zeichenmethoden .........................................................................................................
981
11.2.1
11.2.2
11.2.3
11.2.4
Linien .....................................................................................................................................
Rechtecke .............................................................................................................................
Ovale und Kreisbögen ......................................................................................................
Polygone und Polylines ....................................................................................................
981
981
982
983
Zeichenketten schreiben und Fonts .........................................................................................
985
11.3.1
11.3.2
11.3.3
985
986
987
11.2
11.3
22
Zeichenfolgen schreiben .................................................................................................
Die Font-Klasse ...................................................................................................................
Font-Metadaten durch FontMetrics * .........................................................................
11.4
11.5
11.6
Geometrische Objekte ...................................................................................................................
990
11.4.1
11.4.2
Die Schnittstelle Shape ...................................................................................................
Pfade * ...................................................................................................................................
991
993
Das Innere und Äußere einer Form ..........................................................................................
993
11.5.1
11.5.2
11.5.3
11.5.4
994
994
995
995
Bilder ...................................................................................................................................................... 1000
11.6.1
11.6.2
11.6.3
11.6.4
11.6.5
11.6.6
11.6.7
11.7
11.8
Eine Übersicht über die Bilder-Bibliotheken ............................................................
Bilder mit ImageIO lesen ................................................................................................
Ein Bild zeichnen ...............................................................................................................
Splash-Screen * ..................................................................................................................
Bilder skalieren * ................................................................................................................
Schreiben mit ImageIO ...................................................................................................
Asynchrones Laden mit getImage(…) und dem MediaTracker * ........................
1000
1000
1002
1005
1005
1008
1012
Weitere Eigenschaften von Graphics * ................................................................................... 1013
11.7.1
11.7.2
Eine Kopie von Graphics erstellen ............................................................................... 1013
Koordinatensystem verschieben ................................................................................. 1014
11.7.3
11.7.4
11.7.5
Beschnitt (Clipping) .......................................................................................................... 1015
Zeichenhinweise durch RenderingHints ................................................................... 1018
Transformationen mit einem AffineTransform-Objekt ....................................... 1019
Drucken * .............................................................................................................................................. 1021
11.8.1
11.8.2
11.9
Farben und die Paint-Schnittstelle ..............................................................................
Farben mit der Klasse Color ...........................................................................................
Composite und XOR * ......................................................................................................
Dicke und Art der Linien von Formen bestimmen über Stroke * .......................
Drucken der Inhalte .......................................................................................................... 1021
Bekannte Drucker ............................................................................................................. 1023
Benutzerinteraktionen automatisieren, Robot und Screenshots * ........................... 1024
11.9.1
11.9.2
11.9.3
11.9.4
11.9.5
11.9.6
11.9.7
Der Roboter .........................................................................................................................
Automatisch in die Tasten hauen ...............................................................................
Automatisierte Maus-Operationen ............................................................................
Methoden zur Zeitsteuerung ........................................................................................
Bildschirmabzüge (Screenshots) ..................................................................................
Funktionsweise und Beschränkungen .......................................................................
MouseInfo und PointerInfo ...........................................................................................
1024
1025
1025
1026
1026
1028
1028
11.10 Zum Weiterlesen .............................................................................................................................. 1030
23
Inhalt
Inhalt
12 JavaFX
1031
12.14 Zum Weiterlesen .............................................................................................................................. 1075
12.1
Das erste Programm mit JavaFX ................................................................................................ 1031
12.2
Zentrale Typen in JavaFX .............................................................................................................. 1034
12.2.1
12.2.2
12.3
Szenegraph-Knoten und Container-Typen ............................................................... 1034
Datenstrukturen ................................................................................................................ 1035
JavaFX-Komponenten und Layout-Container-Klassen ................................................... 1036
12.3.1
12.3.2
12.3.3
Überblick über die Komponenten ................................................................................ 1036
Listener/Handler zur Ereignisbeobachtung ............................................................. 1037
Panels mit speziellen Layouts ....................................................................................... 1038
12.4
Webbrowser ....................................................................................................................................... 1040
12.5
Geometrische Objekte ................................................................................................................... 1041
12.6
12.5.1
12.5.2
Linien und Rechtecke ....................................................................................................... 1042
Kreise, Ellipsen, Kreisförmiges ...................................................................................... 1044
12.5.3
12.5.4
12.5.5
12.5.6
12.5.7
Es werde kurvig – quadratische und kubische Splines .........................................
Pfade * ...................................................................................................................................
Polygone und Polylines ....................................................................................................
Beschriftungen, Texte, Fonts .........................................................................................
Die Oberklasse Shape .......................................................................................................
1045
1047
1050
1050
1052
13 Netzwerkprogrammierung
Grundlegende Begriffe .................................................................................................................. 1077
13.2
URI und URL ........................................................................................................................................ 1078
13.2.1
13.2.2
13.2.3
13.2.4
13.3
13.4
Farben mit der Klasse Color ........................................................................................... 1054
Grafiken ................................................................................................................................................ 1057
12.7.1
12.7.2
Klasse Image ....................................................................................................................... 1058
ImageView ........................................................................................................................... 1058
12.7.3
12.7.4
Programm-Icon/Fenster-Icon setzen .......................................................................... 1059
Zugriff auf die Pixel und neue Pixel-Bilder * ............................................................. 1060
12.8
Deklarative Oberflächen mit FXML .......................................................................................... 1062
12.9
Diagramme (Charts) ........................................................................................................................ 1065
12.9.1
12.9.2
13.5
13.6
12.10 Animationen ....................................................................................................................................... 1068
12.10.1 FadeTransition .................................................................................................................... 1069
12.10.2 ScaleTransition ................................................................................................................... 1070
12.10.3 Transitionen parallel oder sequenziell durchführen ............................................. 1070
12.12 Das Geometry-Paket * .................................................................................................................... 1072
24
13.7
Die Klasse URI .....................................................................................................................
Die Klasse URL ....................................................................................................................
Informationen über eine URL * .....................................................................................
Der Zugriff auf die Daten über die Klasse URL ........................................................
1079
1079
1081
1083
Die Klasse URLConnection * ......................................................................................................... 1084
13.3.1
13.3.2
Methoden und Anwendung von URLConnection .................................................. 1084
Protokoll- und Content-Handler .................................................................................. 1087
13.3.3
13.3.4
13.3.5
Im Detail: Von der URL zur URLConnection ............................................................. 1088
Der Protokoll-Handler für JAR-Dateien ...................................................................... 1089
Basic Authentication und Proxy-Authentifizierung .............................................. 1090
Mit GET und POST Daten übergeben * .................................................................................... 1092
13.4.1
13.4.2
Kodieren der Parameter für Serverprogramme ...................................................... 1092
In Wikipedia suchen und mit GET-Request absenden ......................................... 1093
13.4.3
POST-Request absenden ................................................................................................. 1094
Host- und IP-Adressen ................................................................................................................... 1095
13.5.1
13.5.2
13.5.3
13.5.4
Kuchendiagramm .............................................................................................................. 1065
Balkendiagramm ............................................................................................................... 1067
12.11 Medien abspielen ............................................................................................................................. 1071
1077
13.1
Füllart von Formen ........................................................................................................................... 1054
12.6.1
12.7
12.13 JavaFX-Scene in Swing-Applikationen einbetten ............................................................. 1073
Lebt der Rechner? ..............................................................................................................
IP-Adresse des lokalen Hosts .........................................................................................
Das Netz ist klasse * .........................................................................................................
NetworkInterface ..............................................................................................................
1097
1098
1099
1099
Mit dem Socket zum Server ......................................................................................................... 1100
13.6.1
13.6.2
Das Netzwerk ist der Computer ................................................................................... 1100
Sockets .................................................................................................................................. 1101
13.6.3
13.6.4
13.6.5
13.6.6
13.6.7
Eine Verbindung zum Server aufbauen .....................................................................
Server unter Spannung – die Ströme .........................................................................
Die Verbindung wieder abbauen .................................................................................
Informationen über den Socket * ................................................................................
Reine Verbindungsdaten über SocketAddress * .....................................................
1101
1103
1103
1104
1106
Client-Server-Kommunikation ................................................................................................... 1107
13.7.1
13.7.2
13.7.3
Warten auf Verbindungen ............................................................................................. 1107
Ein Multiplikationsserver ............................................................................................... 1108
Blockierendes Lesen ......................................................................................................... 1111
25
Inhalt
Inhalt
13.8
Apache HttpComponents und Commons Net * .................................................................. 1112
13.8.1
13.8.2
13.9
14.2
HttpComponents .............................................................................................................. 1113
Apache Commons Net ..................................................................................................... 1113
14.2.1
14.2.2
14.2.3
14.2.4
14.2.5
14.2.6
Arbeitsweise eines Webservers * .............................................................................................. 1114
13.9.1
13.9.2
13.9.3
13.9.4
Das Hypertext Transfer Protocol (HTTP) ....................................................................
Anfragen an den Server ...................................................................................................
Die Antworten vom Server .............................................................................................
Webserver mit com.sun.net.httpserver.HttpServer ..............................................
1114
1115
1116
1120
14.3
13.10.1 System-Properties ............................................................................................................. 1122
13.10.2 Verbindungen durch die Proxy-API ............................................................................. 1123
13.11 Datagram-Sockets * ......................................................................................................................... 1124
13.11.1 Die Klasse DatagramSocket ........................................................................................... 1126
13.11.2 Datagramme und die Klasse DatagramPacket ....................................................... 1126
Auf ein hereinkommendes Paket warten .................................................................
Ein Paket zum Senden vorbereiten ..............................................................................
Methoden der Klasse DatagramPacket .....................................................................
Das Paket senden ..............................................................................................................
1127
1128
1128
1129
14.3.6
14.3.7
14.4
14.5
13.12.1 Wie eine Elektropost um die Welt geht ..................................................................... 1131
13.12.2 Das Simple Mail Transfer Protocol und RFC 822 ..................................................... 1131
13.12.3
13.12.4
13.12.5
13.12.6
13.12.7
13.12.8
POP (Post Office Protocol) ...............................................................................................
Die JavaMail API .................................................................................................................
E-Mails mittels POP3 abrufen .......................................................................................
Multipart-Nachrichten verarbeiten ............................................................................
E-Mails versenden .............................................................................................................
Ereignisse und Suchen .....................................................................................................
1132
1132
1134
1136
1138
1141
13.13 Tiefer liegende Netzwerkeigenschaften * ............................................................................. 1142
13.13.1 MAC-Adressen auslesen .................................................................................................. 1142
13.13.2 Internet Control Message Protocol (ICMP) ............................................................... 1143
13.14 Zum Weiterlesen .............................................................................................................................. 1143
14 Verteilte Programmierung mit RMI
14.1
Entfernte Objekte und Methoden ............................................................................................ 1145
14.1.1
14.1.2
26
1145
Stellvertreter helfen bei entfernten Methodenaufrufen ..................................... 1145
Standards für entfernte Objekte .................................................................................. 1147
14.6
1147
1148
1148
1150
1150
1151
Entfernte Schnittstelle deklarieren .............................................................................
Remote-Objekt-Implementierung ..............................................................................
Stellvertreterobjekte ........................................................................................................
Der Namensdienst (Registry) ........................................................................................
Remote-Objekt-Implementierung exportieren und beim
Namensdienst anmelden ...............................................................................................
Einfaches Logging .............................................................................................................
Aufräumen mit dem DGC * ............................................................................................
1151
1152
1153
1153
1155
1157
1158
Auf der Client-Seite ......................................................................................................................... 1159
Entfernte Objekte übergeben und laden .............................................................................. 1160
14.5.1
13.12 E-Mail * .................................................................................................................................................. 1131
Zusammenspiel von Server, Registry und Client ....................................................
Wie die Stellvertreter die Daten übertragen ...........................................................
Probleme mit entfernten Methoden ..........................................................................
Nutzen von RMI bei Middleware-Lösungen .............................................................
Zentrale Klassen und Schnittstellen ...........................................................................
Entfernte und lokale Objekte im Vergleich ..............................................................
Auf der Serverseite .......................................................................................................................... 1151
14.3.1
14.3.2
14.3.3
14.3.4
14.3.5
13.10 Verbindungen durch einen Proxy-Server * ........................................................................... 1122
13.11.3
13.11.4
13.11.5
13.11.6
Java Remote Method Invocation .............................................................................................. 1147
Klassen vom RMI-Klassenlader nachladen ............................................................... 1160
Weitere Eigenschaften von RMI ................................................................................................ 1161
14.6.1
14.6.2
RMI und CORBA ................................................................................................................. 1161
RMI über HTTP getunnelt ............................................................................................... 1161
14.6.3
Automatische Remote-Objekt-Aktivierung ............................................................. 1162
14.7
Java Message Service (JMS) ......................................................................................................... 1163
14.8
Zum Weiterlesen .............................................................................................................................. 1163
15 RESTful und SOAP-Web-Services
1165
15.1
Web-Services ...................................................................................................................................... 1165
15.2
RESTful Web-Services ..................................................................................................................... 1166
15.2.1
15.2.2
15.2.3
15.2.4
15.2.5
15.2.6
15.2.7
Aus Prinzip REST ................................................................................................................
Jersey .....................................................................................................................................
JAX-RS-Annotationen für den ersten REST-Service ...............................................
Test-Server starten ...........................................................................................................
REST-Services konsumieren ...........................................................................................
Content-Handler, Marshaller und verschiedene MIME-Typen ..........................
REST-Parameter .................................................................................................................
1166
1168
1169
1169
1170
1171
1174
27
Inhalt
Inhalt
15.2.8 REST-Services mit Parametern über die Jersey-Client-API aufrufen ................ 1176
15.2.9 PUT-Anforderungen und das Senden von Daten ................................................... 1177
15.2.10 PUT/POST/DELETE-Sendungen mit der Jersey-Client-API absetzen ................ 1177
15.3
15.4
Daily Soap und das SOAP-Protokoll ......................................................................................... 1177
15.3.1
Die technische Realisierung ........................................................................................... 1178
15.3.2
15.3.3
15.3.4
15.3.5
15.3.6
Web-Service-APIs und Implementierungen .............................................................
@WebService ......................................................................................................................
Einen Web-Service definieren .......................................................................................
Web-Services veröffentlichen .......................................................................................
Einen JAX-WS-Client implementieren ........................................................................
Arbeiten mit dem ServiceLoader .................................................................................. 1198
Die Utility-Klasse Lookup als ServiceLoader-Fassade ............................................ 1199
Contexts and Dependency Injection (CDI) aus dem JSR-299 .............................. 1200
17.4
Metadaten durch Javadoc-Tags ................................................................................... 1203
An ein Class-Objekt kommen ........................................................................................ 1204
Eine Class ist ein Type ...................................................................................................... 1206
Klassenlader ........................................................................................................................................ 1207
17.3.1
17.3.2
Das Verzeichnis jre/lib/endorsed * .............................................................................. 1207
Die Klasse java.lang.ClassLoader .................................................................................. 1208
17.3.3
Hot Deployment mit dem URL-Classloader * ........................................................... 1209
Metadaten der Typen mit dem Class-Objekt ....................................................................... 1212
Der Name des Typs ........................................................................................................... 1212
Was das Class-Objekt beschreibt * .............................................................................. 1215
17.8
Reflections – Gespür für die Attribute einer Klasse ..............................................
Schnittstelle Member für Eigenschaften ..................................................................
Field-Klasse .........................................................................................................................
Methoden einer Klasse erfragen .................................................................................
Properties einer Bean erfragen .....................................................................................
Konstruktoren einer Klasse ............................................................................................
Annotationen .....................................................................................................................
1224
1225
1226
1227
1230
1231
1232
Objekte erzeugen ..............................................................................................................
Die Belegung der Variablen erfragen .........................................................................
Eine generische eigene toString()-Methode * .........................................................
Variablen setzen ................................................................................................................
Bean-Zustände kopieren * ..............................................................................................
Private Attribute ändern .................................................................................................
Methoden aufrufen ..........................................................................................................
Statische Methoden aufrufen ......................................................................................
Dynamische Methodenaufrufe bei festen Methoden beschleunigen * .........
java.lang.reflect.Parameter ...........................................................................................
1232
1234
1236
1238
1240
1240
1241
1243
1243
1245
Eigene Annotationstypen * .......................................................................................................... 1247
17.7.1
17.7.2
17.7.3
17.7.4
17.7.5
17.7.6
17.7.7
17.7.8
17.7.9
17.7.10
17.7.11
17.7.12
17.7.13
Metadaten der Typen mit dem Class-Objekt ....................................................................... 1204
17.4.1
17.4.2
28
17.7
Metadaten ........................................................................................................................................... 1203
17.2.1
17.2.2
17.3
1203
1217
1218
1219
1219
1221
Objekte erzeugen und manipulieren ...................................................................................... 1232
17.6.1
17.6.2
17.6.3
17.6.4
17.6.5
17.6.6
17.6.7
17.6.8
17.6.9
17.6.10
Zum Weiterlesen .............................................................................................................................. 1202
17.1.1
17.2
17.6
Technische Abhängigkeiten und POJOs .................................................................... 1195
17 Typen, Reflection und Annotationen
17.1
1185
instanceof mit Class-Objekten * ..................................................................................
Oberklassen finden * ........................................................................................................
Implementierte Interfaces einer Klasse oder eines Interfaces * .......................
Modifizierer und die Klasse Modifier * ......................................................................
Die Arbeit auf dem Feld * ...............................................................................................
Attribute, Methoden und Konstruktoren ............................................................................. 1222
17.5.1
17.5.2
17.5.3
17.5.4
17.5.5
17.5.6
17.5.7
Wie eine Implementierung an die richtige Stelle kommt .............................................. 1197
16.2.1
16.2.2
16.2.3
16.3
17.5
Property-Validierung durch Bean Validation ...................................................................... 1185
16.1.1
16.2
1179
1179
1180
1181
1181
Zum Weiterlesen .............................................................................................................................. 1183
16 Technologien für die Infrastruktur
16.1
17.4.3
17.4.4
17.4.5
17.4.6
17.4.7
Annotationen zum Laden von Ressourcen ...............................................................
Neue Annotationen deklarieren ..................................................................................
Annotationen mit genau einem Attribut .................................................................
Element-Wert-Paare (Attribute) hinzufügen ..........................................................
Annotationsattribute vom Typ einer Aufzählung .................................................
Felder von Annotationsattributen ..............................................................................
Vorbelegte Attribute ........................................................................................................
Annotieren von Annotationstypen .............................................................................
Deklarationen für unsere Ressourcen-Annotationen ...........................................
Annotierte Elemente auslesen .....................................................................................
Auf die Annotationsattribute zugreifen ...................................................................
Komplettbeispiel zum Initialisieren von Ressourcen ............................................
Mögliche Nachteile von Annotationen .....................................................................
1247
1248
1248
1249
1250
1251
1252
1253
1259
1260
1262
1263
1266
Zum Weiterlesen .............................................................................................................................. 1267
29
Inhalt
Inhalt
18 Dynamische Übersetzung und Skriptsprachen
18.1
18.4
Generierung von Java-Quellcode ................................................................................. 1271
Codetransformationen .................................................................................................... 1273
Erstellen von Java-Bytecode ........................................................................................... 1273
Java Compiler API ..............................................................................................................
Fehlerdiagnose ...................................................................................................................
Eine im String angegebene Kompilationseinheit übersetzen ............................
Wenn Quelle und Ziel der Speicher sind ....................................................................
1274
1276
1279
1280
18.3.1
18.3.2
Java-Programme mit JavaScript schreiben ............................................................... 1284
Kommandozeilenprogramme jrunscript und jjs .................................................... 1284
18.3.3
18.3.4
18.3.5
18.3.6
javax.script-API ...................................................................................................................
JavaScript-Programme ausführen ...............................................................................
Alternative Sprachen für die JVM ................................................................................
Von den Schwierigkeiten, dynamische Programmiersprachen auf
die JVM zu bringen * .........................................................................................................
1285
1285
1286
20.1
1309
1310
1311
1311
Zum Weiterlesen .............................................................................................................................. 1313
20.2
Logging mit Java ............................................................................................................................... 1293
19.1.1
19.1.2
19.1.3
19.1.4
Logging-APIs ........................................................................................................................
Logging mit java.util.logging .........................................................................................
Logging mit log4j * ............................................................................................................
Die Simple Logging Facade ............................................................................................
1293
1294
1300
1303
19.1.5
Aktuelle Entwicklungen der Java-Logging-APIs ...................................................... 1303
MBean-Typen, MBean-Server und weitere Begriffe ......................................................... 1304
19.3.1
20.4
20.5
Geschwätzige Programme und JConsole ............................................................................... 1306
19.4.1
JConsole ................................................................................................................................ 1307
Der MBeanServer .............................................................................................................................. 1308
20.6
1315
1315
1316
1317
20.2.1
20.2.2
Der Sicherheitsmanager bei Applets .......................................................................... 1318
Sicherheitsmanager aktivieren .................................................................................... 1319
20.2.3
20.2.4
20.2.5
Rechte durch Policy-Dateien vergeben ...................................................................... 1321
Erstellen von Rechtedateien mit dem grafischen Policy-Tool ........................... 1323
Kritik an den Policies ........................................................................................................ 1324
Signierung ........................................................................................................................................... 1326
Warum signieren? ............................................................................................................
Digitale Ausweise und die Zertifizierungsstelle .....................................................
Mit keytool Schlüssel erzeugen ....................................................................................
Signieren mit jarsigner ....................................................................................................
1326
1326
1327
1328
Kryptografische Hashfunktion .................................................................................................. 1328
20.4.1
20.4.2
Die MDx-Reihe ................................................................................................................... 1329
Secure Hash Algorithm (SHA) ....................................................................................... 1329
20.4.3
20.4.4
Mit der Security-API einen Fingerabdruck berechnen .......................................... 1330
Die Klasse MessageDigest ............................................................................................. 1330
Verschlüsseln von Daten(-strömen) * ..................................................................................... 1333
20.5.1
20.5.2
20.5.3
MXBeans des Systems ..................................................................................................... 1305
Sichere Java Virtual Machine ........................................................................................
Der Sandkasten (Sandbox) .............................................................................................
Security-API der Java SE ..................................................................................................
Cryptographic Service Providers ..................................................................................
Sicherheitsmanager (Security-Manager) .............................................................................. 1318
20.3.1
20.3.2
20.3.3
20.3.4
1293
1315
Zentrale Elemente der Java-Sicherheit .................................................................................. 1315
20.1.1
20.1.2
20.1.3
20.1.4
20.3
19.3
30
Management-Schnittstelle ...........................................................................................
Implementierung der Managed-Ressource .............................................................
Anmeldung beim Server .................................................................................................
Eine eigene Bean in JConsole einbringen .................................................................
20 Sicherheitskonzepte
Zum Weiterlesen .............................................................................................................................. 1292
Systemzustände überwachen ..................................................................................................... 1303
19.5
19.7
1288
19.2
19.4
19.6.1
19.6.2
19.6.3
19.6.4
Ausführen von Skripten ................................................................................................................. 1283
19 Logging und Monitoring
19.1
Eine eigene Standard-MBean ..................................................................................................... 1309
Programme mit der Java Compiler API übersetzen .......................................................... 1274
18.2.1
18.2.2
18.2.3
18.2.4
18.3
19.6
Codegenerierung .............................................................................................................................. 1270
18.1.1
18.1.2
18.1.3
18.2
1269
Den Schlüssel, bitte .......................................................................................................... 1333
Verschlüsseln mit Cipher ................................................................................................ 1334
Verschlüsseln von Datenströmen ............................................................................... 1335
Zum Weiterlesen .............................................................................................................................. 1336
31
Inhalt
Inhalt
21 Datenbankmanagement mit JDBC
21.1
Relationale Datenbanken ............................................................................................................. 1337
21.1.1
21.2
21.6
21.7
21.8
21.11 Transaktionen .................................................................................................................................... 1377
21.12 Vorbereitete Datenbankverbindungen ................................................................................. 1378
21.12.1 DataSource .......................................................................................................................... 1378
21.12.2 Gepoolte Datenbankverbindungen ............................................................................ 1381
21.13 Zum Weiterlesen .............................................................................................................................. 1382
22 Java Native Interface (JNI)
Java Native Interface und Invocation-API ............................................................................. 1383
Eine C-Funktion in ein Java-Programm einbinden ............................................................ 1384
Der Treiber-Manager * ..................................................................................................... 1348
Den Treiber laden .............................................................................................................. 1349
22.2
21.5.3
21.5.4
21.5.5
Eine Aufzählung aller Treiber * ..................................................................................... 1350
Log-Informationen * ......................................................................................................... 1351
Verbindung zur Datenbank auf- und abbauen ....................................................... 1351
22.3
22.2.1
Abfragen über das Statement-Objekt ........................................................................ 1354
Ergebnisse einer Abfrage in ResultSet ........................................................................ 1357
21.6.3
21.6.4
21.6.5
21.6.6
21.6.7
Java und SQL-Datentypen ..............................................................................................
Date, Time und Timestamp ...........................................................................................
Unicode in der Spalte korrekt auslesen .....................................................................
Eine SQL-NULL und wasNull() bei ResultSet .............................................................
Wie viele Zeilen hat ein ResultSet? * ...........................................................................
1358
1361
1363
1363
1364
Elemente einer Datenbank ändern .......................................................................................... 1364
21.7.1
21.7.2
Einzelne INSERT-, UPDATE- oder DELETE-Anweisungen senden ....................... 1364
Aktualisierbares ResultSet .............................................................................................. 1365
21.7.3
Batch-Updates .................................................................................................................... 1366
Den Java-Code schreiben ............................................................................................... 1384
Dynamische Bibliotheken erzeugen ........................................................................................ 1385
22.3.1
22.3.2
22.3.3
Datenbankabfragen ........................................................................................................................ 1354
21.6.1
21.6.2
1383
22.1
21.5.1
21.5.2
Die Header-Datei erzeugen ........................................................................................... 1386
Implementierung der Funktion in C ........................................................................... 1387
Die C-Programme übersetzen und die dynamische Bibliothek erzeugen ..... 1388
22.4
Nativ die String-Länge ermitteln .............................................................................................. 1390
22.5
Erweiterte JNI-Eigenschaften ..................................................................................................... 1392
22.6
22.5.1
22.5.2
Klassendefinitionen ......................................................................................................... 1392
Zugriff auf Attribute ........................................................................................................ 1392
22.5.3
22.5.4
22.5.5
Methoden aufrufen .......................................................................................................... 1395
Threads und Synchronisation ....................................................................................... 1396
@Native Markierungen * ............................................................................................... 1396
Einfache Anbindung von existierenden Bibliotheken ..................................................... 1397
22.6.1
22.6.2
22.6.3
22.6.4
Die Ausnahmen bei JDBC, SQLException und Unterklassen ......................................... 1367
JNA (Java Native Access) .................................................................................................
BridJ .......................................................................................................................................
Generieren von JNI-Wrappern aus C++-Klassen und C-Headern .....................
COM-Schnittstellen anzapfen ......................................................................................
1397
1397
1398
1398
JDBC-Fehlerbasisklasse SQLException ....................................................................... 1367
SQLWarning ........................................................................................................................ 1368
22.7
Invocation-API ................................................................................................................................... 1398
ResultSet und RowSet * ................................................................................................................. 1370
22.8
Zum Weiterlesen .............................................................................................................................. 1399
21.9.1
21.9.2
32
Schritte zur Datenbankabfrage .................................................................................... 1346
Ein Client für die HSQLDB-Datenbank ........................................................................ 1346
Mit Java an eine Datenbank andocken .................................................................................. 1348
21.8.1
21.8.2
21.9
Treibertypen * ..................................................................................................................... 1344
JDBC-Versionen * ............................................................................................................... 1345
Eine Beispielabfrage ........................................................................................................................ 1346
21.4.1
21.4.2
21.5
21.10.1 PreparedStatement-Objekte vorbereiten ................................................................. 1375
21.10.2 Werte für die Platzhalter eines PreparedStatement ............................................. 1376
JDBC und Datenbanktreiber ........................................................................................................ 1343
21.3.1
21.3.2
21.4
HSQLDB ................................................................................................................................. 1338
Weitere Datenbanken * ................................................................................................... 1340
Eclipse Data Tools Platform (DTP) zum Durchschauen von Datenbanken .... 1341
Der Typ CachedRowSet ................................................................................................... 1371
Der Typ WebRowSet ........................................................................................................ 1372
21.10 Vorbereitete Anweisungen (Prepared Statements) ......................................................... 1375
Das relationale Modell ..................................................................................................... 1337
Datenbanken und Tools ................................................................................................................ 1338
21.2.1
21.2.2
21.2.3
21.3
21.9.3
21.9.4
1337
Die Schnittstelle RowSet ................................................................................................. 1370
Implementierungen von RowSet ................................................................................. 1370
33
Inhalt
23 Dienstprogramme für die Java-Umgebung
1401
23.1
Programme des JDK ......................................................................................................................... 1401
23.2
Monitoringprogramme vom JDK .............................................................................................. 1401
23.2.1
23.2.2
23.2.3
23.2.4
23.2.5
23.2.6
23.3
23.4
23.3.1
23.3.2
Java-Tools in Java implementiert ................................................................................. 1411
Tools aus eigenen Java-Programmen ansprechen ................................................. 1411
23.3.3
23.3.4
23.3.5
API-Dokumentation der Tools ....................................................................................... 1412
Eigene Doclets .................................................................................................................... 1412
Auf den Compiler-AST einer Klasse zugreifen ......................................................... 1414
Ant ........................................................................................................................................................... 1416
1416
1417
1418
1418
1419
1420
Der Diassembler javap * .................................................................................................. 1422
Decompiler .......................................................................................................................... 1426
Obfuscatoren ...................................................................................................................... 1428
Weitere Dienstprogramme .......................................................................................................... 1430
23.6.1
23.6.2
23.7
Bezug und Installation von Ant ....................................................................................
Das Build-Skript build.xml ..............................................................................................
Build den Build ...................................................................................................................
Properties .............................................................................................................................
Externe und vordefinierte Properties .........................................................................
Weitere Ant-Tasks .............................................................................................................
Disassembler, Decompiler und Obfuscator .......................................................................... 1421
23.5.1
23.5.2
23.5.3
23.6
1401
1402
1402
1403
1404
1406
Programmieren mit der Tools-API ............................................................................................ 1411
23.4.1
23.4.2
23.4.3
23.4.4
23.4.5
23.4.6
23.5
jps ...........................................................................................................................................
jstat ........................................................................................................................................
jmap .......................................................................................................................................
jstack ......................................................................................................................................
jcmd .......................................................................................................................................
VisualVM ..............................................................................................................................
Sourcecode Beautifier ...................................................................................................... 1430
Java-Programme als Systemdienst ausführen ........................................................ 1431
Zum Weiterlesen .............................................................................................................................. 1431
Index ..................................................................................................................................................................... 1433
34