Die Fortsetzung des Java-Kultbuchs für Entwickler! Hier bekommen Sie umfassendes und kompetentes Praxiswissen zu den vielen Bibliotheken und Technologien in einem Band. Am Beispiel konkreter Java-Projekte zeigt Christian Ullenboom, was man wissen muss über Swing/JavaFX, Netzwerk- und Grafikprogrammierung, RMI und Web-Services, JDBC, Reflection und Annotationen, Logging und Monitoring, Java Native Interface (JNI) und vieles mehr. Dieses Buch ist Ihr unersetzlicher Begleiter bei der täglichen Arbeit!
Aus dem Inhalt:
Neues in Java 9
Threads und nebenläufige Programmierung
Datenstrukturen und Algorithmen
Raum und Zeit
Dateien, Verzeichnisse und Dateizugriffe
Datenströme
eXtensible Markup Language
Grafische Oberflächen mit Swing/JavaFX
Grafik- und Netzwerkprogrammierung
Verteilte Programmierung mit RMI
Datenbankmanagement mit JDBC
Reflection und Annotationen
Logging und Monitoring
Die Fachpresse zur Vorauflage:
iX - Magazin für professionelle Informationstechnik: »Ein »Wunderwerk««
PHP Nuke: »Ein wichtiges Java-Standardwerk! Der Schreibstil ist fantastisch. «
cc13. com: »Unverzichtbares Nachschlagewerk, uneingeschränkt zu empfehlen! «
Inhaltsverzeichnis
1. Vorwort . . . 35
1. Neues in Java 9 . . . 43
1. 1 . . . Klassenlader (Class Loader) und Modul-/Klassenpfad . . . 43
1. 2 . . . Module entwickeln und einbinden . . . 49
1. 3 . . . Sprachänderungen in Java 9 . . . 64
1. 4 . . . Bibliotheksänderungen in Java 9 . . . 65
1. 5 . . . Änderungen in den Werkzeugen von Java 9 . . . 65
1. 6 . . . JDK 9-HotSpot-JVM-Änderungen . . . 66
1. 7 . . . Zum Weiterlesen . . . 66
2. Die Klassenbibliothek . . . 67
2. 1 . . . Die Java-Klassenphilosophie . . . 67
2. 2 . . . Die Utility-Klassen System und Properties . . . 74
2. 3 . . . Versionskennungen auslesen, aufbauen, parsen und vergleichen . . . 84
2. 4 . . . Einfache Benutzereingaben . . . 86
2. 5 . . . Benutzereinstellungen * . . . 88
2. 6 . . . Maven: Build-Management und Abhängigkeiten auflösen . . . 95
2. 7 . . . Zum Weiterlesen . . . 99
3. Fortgeschrittene String-Verarbeitung . . . 101
3. 1 . . . Erweiterte Zeicheneigenschaften . . . 101
3. 2 . . . Reguläre Ausdrücke . . . 104
3. 3 . . . Zerlegen von Zeichenketten . . . 122
3. 4 . . . Zeichenkodierungen, XML/HTML-Entities, Base64 * . . . 137
3. 5 . . . Ausgaben formatieren . . . 142
3. 6 . . . Sprachabhängiges Vergleichen und Normalisierung * . . . 154
3. 7 . . . Phonetische Vergleiche * . . . 159
3. 8 . . . Zum Weiterlesen . . . 160
4. Datenstrukturen und Algorithmen . . . 161
4. 1 . . . Datenstrukturen und die Collection-API . . . 161
4. 2 . . . Listen . . . 173
4. 3 . . . Mengen (Sets) . . . 191
4. 4 . . . Queues (Schlangen) und Deques . . . 201
4. 5 . . . Stack (Kellerspeicher, Stapel) . . . 209
4. 6 . . . Assoziative Speicher . . . 211
4. 7 . . . Immutable Datenstrukturen . . . 235
4. 8 . . . Mit einem Iterator durch die Daten wandern . . . 245
4. 9 . . . Algorithmen in Collections . . . 255
4. 10 . . . Datenstrukturen mit Änderungsmeldungen . . . 268
4. 11 . . . Stream-API . . . 278
4. 12 . . . Spezielle threadsichere Datenstrukturen . . . 317
4. 13 . . . Google Guava (Google Collections Library) . . . 327
4. 14 . . . Die Klasse BitSet für Bitmengen * . . . 332
4. 15 . . . Zum Weiterlesen . . . 338
5. Threads und nebenläufige Programmierung . . . 339
5. 1 . . . Threads erzeugen . . . 339
5. 2 . . . Thread-Eigenschaften und Zustände . . . 344
5. 3 . . . Der Ausführer (Executor) kommt . . . 360
5. 4 . . . Synchronisation über kritische Abschnitte . . . 372
5. 5 . . . Synchronisation über Warten und Benachrichtigen . . . 396
5. 6 . . . Datensynchronisation durch besondere Concurrency-Klassen * . . . 408
5. 7 . . . Atomare Operationen und frische Werte mit volatile * . . . 414
5. 8 . . . Teile und herrsche mit Fork und Join * . . . 418
5. 9 . . . Mit dem Thread verbundene Variablen * . . . 424
5. 10 . . . Threads in einer Thread-Gruppe * . . . 430
5. 11 . . . Reaktive Programmierung und die Flow-API * . . . 438
5. 12 . . . Zeitgesteuerte Abläufe . . . 440
5. 13 . . . Ausführen externer Programme, Starten von Prozessen * . . . 442
5. 14 . . . Den Stack-Trace erfragen * . . . 450
5. 15 . . . Einen Abbruch der virtuellen Maschine erkennen . . . 455
5. 16 . . . Zum Weiterlesen . . . 457
6. Raum und Zeit . . . 459
6. 1 . . . Sprachen der Länder . . . 459
6. 2 . . . Internationalisierung und Lokalisierung . . . 463
6. 3 . . . Weltzeit * . . . 468
6. 4 . . . Wichtige Datum-Klassen im Überblick . . . 469
6. 5 . . . Die Klasse Date . . . 472
6. 6 . . . Date-Time-API . . . 474
6. 7 . . . Calendar und GregorianCalendar . . . 504
6. 8 . . . Zeitzonen in Java * . . . 517
6. 9 . . . Formatieren und Parsen von Date-Objekten . . . 520
6. 10 . . . Die Default-Falle . . . 528
6. 11 . . . Zum Weiterlesen . . . 529
7. Dateien, Verzeichnisse und Dateizugriffe . . . 531
7. 1 . . . Alte und neue Welt in java. io und java. nio . . . 531
7. 2 . . . Dateisysteme und Pfade . . . 533
7. 3 . . . Datei- und Verzeichnisoperationen mit der Klasse File . . . 569
7. 4 . . . Dateien mit wahlfreiem Zugriff . . . 585
7. 5 . . . Wahlfreier Zugriff mit SeekableByteChannel und ByteBuffer * . . . 591
7. 6 . . . Zum Weiterlesen . . . 595
8. Datenströme . . . 597
8. 1 . . . Basisklassen für die Ein-/Ausgabe . . . 597
8. 2 . . . Lesen aus Dateien und Schreiben in Dateien . . . 610
8. 3 . . . Übersicht über Ein-/Ausgabeklassen . . . 616
8. 4 . . . Formatierte Textausgaben . . . 620
8. 5 . . . Die FileXXX-Stromklassen . . . 628
8. 6 . . . Schreiben und Lesen aus Strings und Byte-Feldern . . . 635
8. 7 . . . Datenströme filtern und verketten . . . 640
8. 8 . . . Vermittler zwischen Byte-Streams und Unicode-Strömen . . . 653
8. 9 . . . Kommunikation zwischen Threads mit Pipes * . . . 657
8. 10 . . . Prüfsummen . . . 660
8. 11 . . . Persistente Objekte und Serialisierung . . . 664
8. 12 . . . Alternative Datenaustauschformate . . . 685
8. 13 . . . Zum Weiterlesen . . . 688
9. Dateiformate . . . 689
9. 1 . . . Einfache Dateiformate für strukturierte Daten . . . 690
9. 2 . . . Dokumentenformate . . . 694
9. 3 . . . Datenkompression * . . . 697
9. 4 . . . Bildformate . . . 711
9. 5 . . . Audiodateien . . . 711
9. 6 . . . Zum Weiterlesen . . . 715
10. Die eXtensible Markup Language (XML) und JSON . . . 717
10. 1 . . . Auszeichnungssprachen . . . 717
10. 2 . . . Eigenschaften von XML-Dokumenten . . . 718
10. 3 . . . Die Java-APIs für XML . . . 729
10. 4 . . . Java Architecture for XML Binding (JAXB) . . . 732
10. 5 . . . Serielle Verarbeitung mit StAX . . . 755
10. 6 . . . Serielle Verarbeitung von XML mit SAX * . . . 768
10. 7 . . . XML-Dateien mit JDOM verarbeiten . . . 772
10. 8 . . . Transformationen mit XSLT * . . . 794
10. 9 . . . XML-Schema-Validierung * . . . 797
10. 10 . . . JSON-Serialisierung mit Jackson-Datenformat . . . 799
10. 11 . . . Zum Weiterlesen . . . 803
11. Netzwerkprogrammierung . . . 805
11. 1 . . . Grundlegende Begriffe . . . 805
11. 2 . . . URI und URL . . . 807
11. 3 . . . URL-Parameter kodieren . . . 812
11. 4 . . . Die Klassen URLConnection und HttpURLConnection . . . 813
11. 5 . . . Host- und IP-Adressen . . . 822
11. 6 . . . Socket-Verbindungen . . . 827
11. 7 . . . HTTP Client API in Java 9 . . . 841
11. 8 . . . Neue externe Netzwerkbibliotheken * . . . 843
11. 9 . . . Arbeitsweise eines Webservers * . . . 844
11. 10 . . . Verbindungen durch einen Proxy-Server * . . . 853
11. 11 . . . Bidirektionale binäre Webkommunikation über WebSockets * . . . 855
11. 12 . . . Datagram-Sockets * . . . 856
11. 13 . . . Tiefer liegende Netzwerkeigenschaften * . . . 862
11. 14 . . . Zum Weiterlesen . . . 863
12. RESTful und SOAP-Web-Services . . . 865
12. 1 . . . Web-Services . . . 865
12. 2 . . . RESTful Web-Services . . . 866
12. 3 . . . Daily Soap und das SOAP-Protokoll . . . 868
12. 4 . . . Zum Weiterlesen . . . 874
13. Verteilte Programmierung mit RMI . . . 875
13. 1 . . . Entfernte Objekte und Methoden . . . 875
13. 2 . . . Java Remote Method Invocation . . . 877
13. 3 . . . Auf der Serverseite . . . 881
13. 4 . . . Auf der Client-Seite . . . 889
13. 5 . . . Entfernte Objekte übergeben und laden . . . 890
13. 6 . . . Automatische Remote-Objekt-Aktivierung . . . 891
13. 7 . . . Java Message Service (JMS) . . . 892
13. 8 . . . Zum Weiterlesen . . . 892
14. Typen, Reflection und Annotationen . . . 895
14. 1 . . . Metadaten . . . 895
14. 2 . . . Die Klasse Class . . . 896
14. 3 . . . Klassenlader . . . 899
14. 4 . . . Metadaten der Typen mit dem Class-Objekt . . . 905
14. 5 . . . Attribute, Methoden und Konstruktoren . . . 915
14. 6 . . . Objekte erzeugen und manipulieren . . . 927
14. 7 . . . Schneller aufrufen mit MethodType und MethodHandle . . . 941
14. 8 . . . Eigene Annotationstypen * . . . 942
14. 9 . . . Zum Weiterlesen . . . 962
15. Logging und Monitoring . . . 963
15. 1 . . . Logging mit Java . . . 963
15. 2 . . . Systemzustände überwachen . . . 976
15. 3 . . . MBean-Typen, MBean-Server und weitere Begriffe . . . 976
15. 4 . . . Geschwätzige Programme und JConsole . . . 979
15. 5 . . . Der MBeanServer . . . 981
15. 6 . . . Eine eigene Standard-MBean . . . 982
15. 7 . . . Zum Weiterlesen . . . 986
16. Datenbankmanagement mit JDBC . . . 987
16. 1 . . . Relationale Datenbanken und Datenbankmanagementsysteme . . . 987
16. 2 . . . JDBC und Datenbanktreiber . . . 993
16. 3 . . . Eine Beispielabfrage . . . 995
16. 4 . . . Mit Java an eine Datenbank andocken . . . 996
16. 5 . . . Datenbankabfragen . . . 1003
16. 6 . . . Elemente einer Datenbank ändern . . . 1013
16. 7 . . . Die Ausnahmen bei JDBC, SQLException und Unterklassen . . . 1016
16. 8 . . . ResultSet und RowSet * . . . 1019
16. 9 . . . Vorbereitete Anweisungen (Prepared Statements) . . . 1023
16. 10 . . . Transaktionen . . . 1026
16. 11 . . . Vorbereitete Datenbankverbindungen . . . 1027
16. 12 . . . Zum Weiterlesen . . . 1031
17. Grafische Oberflächen mit Swing . . . 1033
17. 1 . . . AWT, JavaFoundation Classes und Swing . . . 1033
17. 2 . . . Mit NetBeans zur ersten Swing-Oberfläche . . . 1038
17. 3 . . . Aller Swing-Anfang -- Fenster zur Welt . . . 1049
17. 4 . . . Beschriftungen (JLabel) . . . 1057
17. 5 . . . Icon und ImageIcon für Bilder auf Swing-Komponenten . . . 1060
17. 6 . . . Es tut sich was -- Ereignisse beim AWT . . . 1062
17. 7 . . . Schaltflächen . . . 1076
17. 8 . . . Textkomponenten . . . 1081
17. 9 . . . Swing Action * . . . 1093
17. 10 . . . JComponent und Component als Basis aller Komponenten . . . 1095
17. 11 . . . Container . . . 1108
17. 12 . . . Alles Auslegungssache -- die Layoutmanager . . . 1112
17. 13 . . . Rollbalken und Schieberegler . . . 1126
17. 14 . . . Kontrollfelder, Optionsfelder, Kontrollfeldgruppen . . . 1131
17. 15 . . . Fortschritte bei Operationen überwachen * . . . 1137
17. 16 . . . Menüs und Symbolleisten . . . 1139
17. 17 . . . Das Model-View-Controller-Konzept . . . 1155
17. 18 . . . Auswahlmenüs, Listen und Spinner . . . 1157
17. 19 . . . Tabellen (JTable) . . . 1172
17. 20 . . . Bäume (JTree) . . . 1187
17. 21 . . . Dialoge und Window-Objekte . . . 1192
17. 22 . . . Flexibles Java-Look-and-Feel . . . 1201
17. 23 . . . Swing-Komponenten neu erstellen oder verändern * . . . 1203
17. 24 . . . Die Zwischenablage (Clipboard) . . . 1206
17. 25 . . . AWT, Swing und die Threads . . . 1211
17. 26 . . . Barrierefreiheit mit der Java Accessibility API . . . 1219
17. 27 . . . Zeitliches Ausführen mit dem javax. swing. Timer . . . 1220
17. 28 . . . Zum Weiterlesen . . . 1221
18. Grafikprogrammierung . . . 1223
18. 1 . . . Grundlegendes zum Zeichnen . . . 1223
18. 2 . . . Einfache Zeichenmethoden . . . 1229
18. 3 . . . Zeichenketten schreiben und Fonts . . . 1233
18. 4 . . . Geometrische Objekte . . . 1239
18. 5 . . . Das Innere und Äußere einer Form . . . 1242
18. 6 . . . Bilder . . . 1249
18. 7 . . . Weitere Eigenschaften von Graphics * . . . 1263
18. 8 . . . Drucken * . . . 1271
18. 9 . . . Benutzerinteraktionen automatisieren, Robot und Screenshots * . . . 1274
18. 10 . . . Zum Weiterlesen . . . 1280
19. JavaFX . . . 1281
19. 1 . . . Das erste Programm mit JavaFX . . . 1281
19. 2 . . . Zentrale Typen in JavaFX . . . 1284
19. 3 . . . JavaFX-Komponenten und Layout-Container-Klassen . . . 1286
19. 4 . . . Webbrowser . . . 1290
19. 5 . . . Geometrische Objekte . . . 1291
19. 6 . . . Füllart von Formen . . . 1304
19. 7 . . . Grafiken . . . 1308
19. 8 . . . Deklarative Oberflächen mit FXML . . . 1313
19. 9 . . . Diagramme (Charts) . . . 1315
19. 10 . . . Animationen . . . 1319
19. 11 . . . Medien abspielen . . . 1322
19. 12 . . . Java 3D . . . 1323
19. 13 . . . Das Geometry-Paket * . . . 1323
19. 14 . . . JavaFX-Scene in Swing-Applikationen einbetten . . . 1324
19. 15 . . . Zum Weiterlesen . . . 1326
20. Sicherheitskonzepte . . . 1327
20. 1 . . . Zentrale Elemente der Java-Sicherheit . . . 1327
20. 2 . . . Sicherheitsmanager (Security-Manager) . . . 1330
20. 3 . . . Signierung . . . 1338
20. 4 . . . Kryptografische Hashfunktion . . . 1341
20. 5 . . . Verschlüsseln von Daten(-strömen) * . . . 1346
20. 6 . . . Zum Weiterlesen . . . 1349
21. Dynamische Übersetzung, Skriptsprachen, JShell . . . 1351
21. 1 . . . Codegenerierung . . . 1352
21. 2 . . . Programme mit der Java Compiler API übersetzen . . . 1356
21. 3 . . . Ausführen von Skripten . . . 1366
21. 4 . . . JShell, die interaktive REPL-Shell . . . 1375
21. 5 . . . Zum Weiterlesen . . . 1381
22. Java Native Interface (JNI) . . . 1383
22. 1 . . . Java Native Interface und Invocation-API . . . 1383
22. 2 . . . Eine C-Funktion in ein Java-Programm einbinden . . . 1384
22. 3 . . . Dynamische Bibliotheken erzeugen . . . 1386
22. 4 . . . Erweiterte JNI-Eigenschaften . . . 1392
22. 5 . . . Einfache Anbindung von existierenden Bibliotheken . . . 1397
22. 6 . . . Invocation-API . . . 1399
22. 7 . . . Zum Weiterlesen . . . 1400
23. Dienstprogramme für die Java-Umgebung . . . 1401
23. 1 . . . Programme des JDK . . . 1401
23. 2 . . . Monitoringprogramme vom JDK . . . 1401
23. 3 . . . Ant . . . 1411
23. 4 . . . Disassembler, Decompiler und Obfuscator . . . 1417
23. 5 . . . Weitere Dienstprogramme . . . 1426
23. 6 . . . Zum Weiterlesen . . . 1426
Index . . . 1427