Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Einleitung
21
1 Java ist auch eine Sprache
31
1.1 Bytecode und JVM
31
1.1.1 Java-Programme portieren *
32
1.2 Werkzeuge für Java-Entwickler
32
1.2.1 Fehlermeldungen der IDE kennenlernen *
33
1.3 Lösungsvorschläge
34
2 Imperative Sprachkonzepte
37
2.1 Bildschirmausgaben
38
2.1.1 SVG-Spezifikation kennenlernen *
38
2.1.2 Einen SVG-Kreis auf die Konsole schreiben *
38
2.2 Variablen und Datentypen
40
2.2.1 Auf Variablen zugreifen und Belegung ausgeben *
40
2.2.2 Quiz: Wertebereiche einhalten *
41
2.2.3 Quiz: Nicht so genau genommen ***
41
2.2.4 Zufallszahlen bilden und verschiedene Kreise generieren *
41
2.2.5 Quiz: Unübersichtlichkeit vermeiden *
42
2.2.6 Benutzereingaben verarbeiten *
42
2.3 Ausdrücke, Operanden und Operatoren
43
2.3.1 Quiz: Im Bereich prüfen *
43
2.3.2 Prüfen, ob Beute fair aufgeteilt werden kann *
43
2.3.3 Besitzen zwei Zahlen gleiche Ziffern? **
44
2.3.4 Währungsbetrag in Münzen umrechnen **
44
2.3.5 Eine Flasche Rum, 10 Flaschen Rum *
45
2.3.6 Einundzwanzig *
46
2.3.7 Quiz: Der Nulleffekt *
46
2.4 Fallunterscheidungen
46
2.4.1 Zahltag *
47
2.4.2 Quiz: Falsche Verzweigung *
47
2.4.3 Literangaben umrechnen **
47
2.4.4 SVG-Kreise mit zufälligen Farben erzeugen *
48
2.4.5 Quiz: Zu welchem Block gehört das »else«? **
48
2.4.6 Eingegebene Zeichenfolgen für eine Zustimmung auswerten *
49
2.5 Schleifen
49
2.5.1 Rotierte SVG-Rechtecke erzeugen *
49
2.5.2 SVG-Perlenkette erzeugen *
50
2.5.3 Zahlen von der Kommandozeile summieren *
50
2.5.4 Ein mathematisches Phänomen durchlaufen *
51
2.5.5 Quiz: Wie viele Sternchen? *
52
2.5.6 Produkte für Fakultäten berechnen *
52
2.5.7 Feststellen, ob eine Zahl durch Fakultät gebildet wurde *
53
2.5.8 Kleinste und größte Ziffer einer Zahl finden *
53
2.5.9 Quiz: So nicht von 1 bis 100 **
54
2.5.10 Ein Wimpel im Wind durch geschachtelte Schleifen *
54
2.5.11 Einfaches Schachbrett ausgeben *
55
2.5.12 Es weihnachtet sehr: Bäume mit Schmuck darstellen *
55
2.5.13 Fischige Stickmotive zeichnen *
56
2.5.14 Ausprobieren statt Denken **
56
2.5.15 Anzahl Ziffern einer Zahl ermitteln **
57
2.6 Methoden
57
2.6.1 Herzen zeichnen *
57
2.6.2 Überladene Linien-Methoden implementieren *
58
2.6.3 Alles im Lot *
58
2.6.4 Collatz-Folge berechnen *
59
2.6.5 Multiplikationstabelle erstellen *
60
2.7 Lösungsvorschläge
61
3 Klassen, Objekte, Pakete
101
3.1 Objekte erzeugen
101
3.1.1 Polygone zeichnen ***
102
3.2 Import und Pakete
103
3.2.1 Quiz: Schön der Reihe nach *
103
3.3 Arbeiten mit Referenzen
104
3.3.1 Quiz: Das kurze Leben der Punkte *
104
3.3.2 Dreiecke aufbauen *
104
3.3.3 Quiz: == vs. equals(...) *
105
3.3.4 Quiz: Gegen NullPointerException schützen *
105
3.4 Lösungsvorschläge
106
4 Arrays
111
4.1 Alles hat einen Typ
111
4.1.1 Quiz: Array-Typen *
112
4.2 Eindimensionale Arrays
112
4.2.1 Arrays ablaufen und Windgeschwindigkeit, Windrichtung ausgeben *
112
4.2.2 Konstante Umsatzsteigerung feststellen *
113
4.2.3 Aufeinanderfolgende Strings suchen und feststellen, ob Salty Snook kommt *
113
4.2.4 Array umdrehen *
114
4.2.5 Das nächste Kino finden **
115
4.2.6 Süßigkeitenladen überfallen und fair aufteilen **
115
4.3 Erweiterte for-Schleife
116
4.3.1 Berge zeichnen **
116
4.4 Zwei- und mehrdimensionale Arrays
117
4.4.1 Mini-Sudoku auf gültige Lösung prüfen **
117
4.4.2 Bild vergrößern **
118
4.5 Variable Argumentlisten
118
4.5.1 SVG-Polygone mit variabler Koordinatenanzahl erzeugen *
118
4.5.2 Auf Zustimmung prüfen *
119
4.5.3 Hilfe, Tetraphobie! Alle Vieren nach hinten setzen **
119
4.6 Die Utility-Klasse Arrays
120
4.6.1 Quiz: Arrays kopieren *
120
4.6.2 Quiz: Arrays vergleichen *
120
4.7 Lösungsvorschläge
121
5 Zeichenkettenverarbeitung
141
5.1 Die Klasse String und ihre Eigenschaften
141
5.1.1 Quiz: Ist String ein eingebautes Schlüsselwort? *
142
5.1.2 HTML-Elemente aufbauen mit einfacher Konkatenation *
142
5.1.3 Strings füllen *
142
5.1.4 Sichere Übermittelung durch Verdoppelung der Zeichen prüfen *
143
5.1.5 Y und Z vertauschen *
143
5.1.6 Trotzige Antworten geben *
144
5.1.7 Quiz: String-Vergleiche mit == und equals(...) *
145
5.1.8 Quiz: Ist equals(...) symmetrisch? *
145
5.1.9 Zeichenfolgen auf Palindrom-Eigenschaft testen *
145
5.1.10 Prüfen, ob Captain CiaoCiao in der Mitte steht *
146
5.1.11 Den kürzesten Namen im Array finden *
146
5.1.12 String-Vorkommen zählen *
147
5.1.13 Die größere Mannschaft ermitteln *
147
5.1.14 Diamanten bauen **
148
5.1.15 Wörter unterstreichen **
148
5.1.16 Vokale entfernen *
149
5.1.17 Auf ein gutes Passwort prüfen *
149
5.1.18 Quersumme berechnen *
149
5.1.19 Texte entspalten **
150
5.1.20 Eine Wiese mit Lieblingsblumen zeichnen **
151
5.1.21 Wiederholungen erkennen ***
152
5.1.22 Zeilengrenzen beschränken und Zeilen umbrechen **
153
5.1.23 Quiz: Wie viele String-Objekte? *
153
5.1.24 Testen, ob die Frucht schokoladig umhüllt ist **
153
5.1.25 Von oben nach unten, von links nach rechts ***
154
5.2 Dynamische Strings mit StringBuilder
155
5.2.1 Mit dem Papagei das Alphabet üben *
155
5.2.2 Quiz: Leicht angehängt *
156
5.2.3 Zahl in unäre Kodierung konvertieren *
156
5.2.4 Gewicht durch Vertauschung verlieren *
157
5.2.5 Don't shoot the Messenger *
157
5.2.6 Wiederholte Leerzeichen komprimieren **
158
5.2.7 Knacken und Knistern einfügen und entfernen *
159
5.2.8 CamelCase-Strings zerlegen *
159
5.2.9 Caesar-Verschlüsselung implementieren ***
159
5.3 Lösungsvorschläge
160
6 Eigene Klassen schreiben
213
6.1 Klassendeklaration und Objekteigenschaften
214
6.1.1 Radio mit Objektvariablen und ein Hauptprogramm deklarieren *
214
6.1.2 Methoden eines Radios implementieren *
215
6.1.3 Private Parts: Objektvariablen privat machen *
216
6.1.4 Setter und Getter anlegen *
216
6.2 Statische Eigenschaften
217
6.2.1 Sendernamen in Frequenzen konvertieren *
217
6.2.2 Logausgaben mit einer Tracer-Klasse schreiben *
218
6.2.3 Quiz: Nix geklaut *
219
6.3 Aufzählungen
219
6.3.1 Radio eine AM-FM-Modulation geben *
219
6.3.2 Gültige Start- und Endfrequenz bei Modulation setzen *
220
6.4 Konstruktoren
220
6.4.1 Anlegevarianten: Radio-Konstruktoren schreiben *
220
6.4.2 Copy-Konstruktor implementieren *
221
6.4.3 Fabrikmethoden realisieren *
221
6.5 Assoziationen
222
6.5.1 Bildröhre mit Fernsehgerät verbinden *
222
6.5.2 Quiz: Assoziation, Komposition, Aggregation *
223
6.5.3 Radios mit einer 1:n-Assoziation auf das Schiff aufnehmen **
223
6.6 Vererbung
224
6.6.1 Abstraktion in Elektrogeräte über Vererbung einführen *
224
6.6.2 Quiz: Drei, Zwei, Eins *
225
6.6.3 Quiz: private- und protected-Konstruktor *
226
6.6.4 Anzahl eingeschalteter Elektrogeräte ermitteln *
226
6.6.5 Schiff soll jedes Elektrogerät aufnehmen *
226
6.6.6 Funktionierende Radios auf das Schiff nehmen *
227
6.6.7 Feuermelder geht nicht aus: Überschreiben von Methoden *
227
6.6.8 Aufruf der Methoden der Oberklasse **
228
6.7 Polymorphie und dynamisches Binden
228
6.7.1 Urlaub! Alle Geräte ausschalten *
228
6.7.2 Quiz: Bumbo ist ein toller Drink **
229
6.7.3 Quiz: Vodka mit Geschmack *
230
6.7.4 Quiz: Rum-Paradise **
230
6.8 Abstrakte Klassen und abstrakte Methoden
231
6.8.1 Quiz: Konsumgeräte als abstrakte Oberklasse? *
231
6.8.2 TimerTask als Beispiel für eine abstrakte Klasse **
231
6.9 Schnittstellen
233
6.9.1 Verbrauch von Elektrogeräten vergleichen *
233
6.9.2 Elektrogeräte mit dem höchsten Verbrauch finden *
234
6.9.3 Schnittstelle Comparator zum Sortieren einsetzen *
235
6.9.4 Statische und Default-Methoden in Schnittstellen ***
235
6.9.5 Ausgewählte Elemente mit Predicate löschen **
236
6.10 Lösungsvorschläge
237
7 Geschachtelte Typen
269
7.1 Geschachtelte Typen deklarieren
269
7.1.1 AM-FM-Modulation in den Radio-Typ setzen *
269
7.1.2 Drei Arten von Watt-Comparator-Implementierungen schreiben *
270
7.2 Geschachtelte-Typen-Quiz
271
7.2.1 Quiz: Pirat hätte winken können *
271
7.2.2 Quiz: Name in a Bottle **
271
7.2.3 Quiz: Hol mir noch 'ne Flasche Rum *
272
7.3 Lösungsvorschläge
272
8 Exceptions
277
8.1 Exception fangen
278
8.1.1 Die längste Zeile einer Datei ermitteln **
278
8.1.2 Ausnahmen ermitteln, Lachen am laufenden Band *
278
8.1.3 String-Array in int-Array konvertieren und nachsichtig bei Nichtzahlen sein *
279
8.1.4 Quiz: Und zum Schluss finally *
280
8.1.5 Quiz: Ein einsames try *
280
8.1.6 Quiz: Gut gefangen *
280
8.1.7 Quiz: Zu viel des Guten *
281
8.1.8 Quiz: try-catch in Vererbung **
281
8.2 Eigene Ausnahmen auslösen
281
8.2.1 Quiz: throw und throws *
282
8.2.2 Quiz: The Division fails *
282
8.3 Eigene Ausnahmeklassen schreiben
282
8.3.1 »Watt ist unmöglich« mit eigener Ausnahme anzeigen *
282
8.3.2 Quiz: Kartoffeln oder anderes Gemüse *
282
8.4 try-mit-Ressourcen
283
8.4.1 Aktuelles Datum in Datei schreiben *
283
8.4.2 Noten einlesen und in eine neue ABC-Datei schreiben **
283
8.4.3 Quiz: Ausgeschlossen *
286
8.5 Lösungsvorschläge
286
9 Lambda-Ausdrücke und funktionale Programmierung
301
9.1 Lambda-Ausdrücke
302
9.1.1 Quiz: Gültige funktionale Schnittstellen erkennen *
302
9.1.2 Quiz: Von der Schnittstellenimplementierung zum Lambda-Ausdruck *
303
9.1.3 Lambda-Ausdrücke für funktionale Schnittstellen schreiben *
304
9.1.4 Quiz: Lambda-Ausdrücke so schreiben? *
305
9.1.5 Lambda-Ausdrücke entwickeln *
305
9.1.6 Quiz: Inhalt des Pakets java.util.function *
306
9.1.7 Quiz: Funktionale Schnittstellen für Abbildungen kennen *
306
9.2 Methoden- und Konstruktorreferenzen
308
9.3 Ausgewählte funktionale Schnittstellen
308
9.3.1 Einträge löschen, Kommentare entfernen, in CSV konvertieren *
308
9.4 Lösungsvorschläge
310
10 Besondere Typen aus der Java-Bibliothek
317
10.1 Absolute Oberklasse java.lang.Object
318
10.1.1 equals(Object) und hashCode() generieren lassen *
318
10.1.2 Existierende equals(Object)-Implementierungen **
319
10.2 Schnittstellen Comparator und Comparable
320
10.2.1 Quiz: Natürliche Ordnung oder nicht? *
320
10.2.2 Superhelden verarbeiten
321
10.2.3 Superhelden vergleichen **
323
10.2.4 Helden-Comparatoren verketten **
323
10.2.5 Mit einem Key-Extraktor schnell zum Comparator **
324
10.2.6 Punkte nach Abstand zum Zentrum sortieren *
326
10.2.7 Geschäfte in der Nähe ermitteln **
327
10.3 Autoboxing
327
10.3.1 Quiz: Behandlung der null-Referenz beim Unboxing *
327
10.3.2 Quiz: Überraschung beim Unboxing **
328
10.4 Aufzählungstypen (enum)
328
10.4.1 Aufzählung für Süßwaren *
328
10.4.2 Zufällige Süßwaren liefern *
329
10.4.3 Süßwaren mit Suchtfaktor auszeichnen **
330
10.4.4 Schnittstellen-Implementierungen über ein enum **
331
10.4.5 Quiz: Aviso und Brig *
331
10.4.6 Aufzählungen vereinigen ***
332
10.5 Lösungsvorschläge
332
11 Fortgeschrittene Zeichenkettenverarbeitung
357
11.1 Strings formatieren
358
11.1.1 ASCII-Tabelle aufbauen *
358
11.1.2 Ausgaben bündig untereinandersetzen *
359
11.2 Reguläre Ausdrücke und Mustererkennung
359
11.2.1 Quiz: Regex definieren *
360
11.2.2 Beliebtheit in sozialen Medien ermitteln *
360
11.2.3 Eingescannte Werte erkennen *
360
11.2.4 Leise bitte! Schreiende Texte entschärfen(Java 9) *
361
11.2.5 Zahlen erkennen und in Wörter umwandeln **
361
11.2.6 Zeit mit AM und PM in 24-Stunden-Zählung umsetzen **
362
11.3 Zeichenketten in Tokens zerlegen
362
11.3.1 Adresszeilen mit dem StringTokenizer zerlegen *
363
11.3.2 Sätze in Wörter zerlegen und umdrehen *
364
11.3.3 Relationen zwischen Zahlen prüfen *
364
11.3.4 A1-Notation in Spalten und Zeilen umwandeln **
365
11.3.5 Einfache CSV-Dateien mit Koordinaten parsen *
366
11.3.6 Strings verlustfrei durch Lauflängenkodierung komprimieren ***
366
11.4 Zeichenkodierungen und Unicode-Collation-Algorithmus
367
11.4.1 Quiz: Kodierung für Unicode-Zeichen *
367
11.4.2 Quiz: Ordnung von Zeichenfolgen mit und ohne Collator *
368
11.5 Lösungsvorschläge
368
12 Mathematisches
389
12.1 Die Klasse Math
389
12.1.1 Quiz: Was ergibt Pi mal Daumen? *
390
12.1.2 Prüfen, ob Tin Tin beim Runden betrogen hat *
391
12.2 Große und sehr präzise Zahlen
392
12.2.1 Arithmetischen Mittelwert einer großen Ganzzahl berechnen *
392
12.2.2 Zahl für Zahl über das Telefon *
393
12.2.3 Klasse für Brüche entwickeln und Brüche kürzen **
393
12.3 Lösungsvorschläge
395
13 Raum und Zeit
405
13.1 Sprachen und Länder
406
13.1.1 Landes-/Sprachtypische Formatierungen für Zufallszahl anwenden *
406
13.2 Datum- und Zeit-Klassen
407
13.2.1 Datumsausgabe in verschiedenen Sprachen formatieren *
408
13.2.2 An welchem Tag feiert Sir Francis Beaufort dieses Jahr Geburtstag? *
408
13.2.3 Durchschnittliche Dauer der Karaoke-Nächte ermitteln *
409
13.2.4 Verschiedene Datumsformate parsen ***
410
13.3 Lösungsvorschläge
410
14 Nebenläufige Programmierung mit Threads
419
14.1 Anlegen von Threads
420
14.1.1 Threads erzeugen für Winken und Fähnchenschwenken *
421
14.1.2 Nix mehr mit Winken und Fähnchenschwenken: Threads beenden *
422
14.1.3 Runnable parametrisieren **
423
14.2 Ausgeführt und stillgestanden
424
14.2.1 Abarbeitung durch schlafende Threads verzögern **
424
14.2.2 Dateiänderungen beobachten durch Threads *
425
14.2.3 Exceptions auffangen *
426
14.3 Thread-Pools und Ergebnisse
427
14.3.1 Thread-Pool nutzen **
427
14.3.2 Letzte Modifikation von Webseiten ermitteln **
428
14.4 Kritische Abschnitte schützen
429
14.4.1 Erinnerungen ins Poesiealbum schreiben *
430
14.5 Thread-Kooperation und Synchronisationshelfer
432
14.5.1 Am Bankett mit den Captains teilnehmen - Semaphore **
433
14.5.2 Fluchen und beleidigen - Condition **
434
14.5.3 Stifte aus dem Malkasten nehmen - Condition **
434
14.5.4 Schere, Stein, Papier spielen - CyclicBarrier ***
435
14.5.5 Den schnellsten Läufer finden - CountDownLatch **
436
14.6 Lösungsvorschläge
437
15 Datenstrukturen und Algorithmen
461
15.1 Die Schnittstellen der Collection-API
463
15.1.1 Quiz: Nach StringBuilder suchen *
465
15.2 Listen
465
15.2.1 Singen und Kochen: Listen ablaufen und Eigenschaften prüfen *
466
15.2.2 Kommentare aus Listen filtern *
467
15.2.3 Listen kürzen, denn Abschwung gibt es nicht *
468
15.2.4 Essen mit Freunden: Elemente vergleichen, Gemeinsamkeiten finden *
468
15.2.5 Listen auf gleiche Reihenfolge der Elemente prüfen *
469
15.2.6 Und jetzt das Wetter: Wiederholte Elemente finden *
469
15.2.7 Bon-Ausgaben erzeugen *
470
15.2.8 Quiz: Arrays dekoriert *
471
15.2.9 Quiz: Gesucht und nicht gefunden *
471
15.2.10 Alles schmeckt besser mit Käse: In Listen Elemente einfügen *
471
15.2.11 Quiz: Mit dem Nichts nichts als Ärger *
472
15.2.12 Elemente mit dem Iterator suchen und Covid Cough finden **
472
15.2.13 Elemente verschieben, Reise nach Jerusalem spielen *
473
15.2.14 Fragespiel mit Planeten programmieren **
474
15.3 Mengen
475
15.3.1 Teilmengen bilden, Gemeinsamkeiten herausfinden *
476
15.3.2 Quiz: Tolle Schwerter *
476
15.3.3 Doppelte Elemente aus Arrays entfernen *
477
15.3.4 Alle in einem Wort enthaltenen Wörter ermitteln **
478
15.3.5 Fast Gleiches richtig sortieren **
479
15.3.6 Mit einem UniqueIterator doppelte Elemente ausschließen **
479
15.4 Assoziativspeicher
480
15.4.1 Zweidimensionale Arrays in Map konvertieren *
480
15.4.2 Text in Morsecode konvertieren und umgekehrt *
481
15.4.3 Worthäufigkeit mit Assoziativspeicher merken **
481
15.4.4 Farben einlesen und vorlesen lassen **
482
15.4.5 Namen einlesen und Längen verwalten *
483
15.4.6 Fehlende Zeichen finden **
483
15.4.7 Anzahl der Wege zum dreiköpfigen Affen berechnen **
484
15.4.8 Feiertage in einem sortierten Assoziativspeicher verwalten *
486
15.4.9 Quiz: Schlüssel in einer HashMap **
487
15.4.10 Gemeinsamkeiten bestimmen: Partygedeck und Mitbringsel *
487
15.5 Properties
488
15.5.1 Komfortablen Properties-Dekorator entwickeln **
488
15.6 Stapelspeicher (Stack) und Warteschlangen (Queue)
490
15.6.1 UPN-Taschenrechner programmieren *
490
15.7 BitSet
491
15.7.1 Finde doppelte Einträge, und löse das tierische Chaos *
491
15.8 Threadsichere Datenstrukturen
492
15.8.1 Schiff beladen **
492
15.8.2 Wichtige Nachrichten als Erstes bearbeiten **
493
15.8.3 Wenn verbraucht, dann neu ***
495
15.9 Lösungsvorschläge
496
16 Java-Stream-API
559
16.1 Reguläre Ströme mit ihren terminalen und intermediären Operationen
560
16.1.1 Heldenepos: Stream-API kennenlernen *
560
16.1.2 Quiz: Doppelt ausgegeben *
561
16.1.3 Den geliebten Captain aus einer Liste ermitteln *
561
16.1.4 Bilder einrahmen (Java 11) *
562
16.1.5 Schau und sag **
563
16.1.6 Doppelte Inseln mit Metallen der Seltenen Erden entfernen (Java 9) ***
564
16.1.7 Wo gibt es die Segel? **
565
16.1.8 Das beliebteste Auto kaufen ***
566
16.2 Primitive Ströme
567
16.2.1 NaN in einem Array erkennen *
567
16.2.2 Jahrzehnte erzeugen *
567
16.2.3 Array mit konstantem Inhalt über Stream erzeugen *
568
16.2.4 Pyramiden zeichnen (Java 11) *
568
16.2.5 Buchstabenhäufigkeit eines Strings ermitteln *
568
16.2.6 Von 1 auf 0, von 10 auf 9 **
569
16.2.7 Zwei int-Arrays zusammenführen **
570
16.2.8 Gewinnkombinationen ermitteln **
570
16.3 Statistiken
571
16.3.1 Die schnellsten und langsamsten Paddler *
571
16.3.2 Median berechnen **
572
16.3.3 Temperaturstatistiken berechnen und Charts zeichnen ***
572
16.4 Lösungsvorschläge
574
17 Dateien und wahlfreier Zugriff auf Dateiinhalte
605
17.1 Path und Files
606
17.1.1 Spruch des Tages anzeigen *
606
17.1.2 Verstecke zusammenführen *
607
17.1.3 Kopien einer Datei erstellen **
607
17.1.4 Verzeichnislisting generieren *
608
17.1.5 Nach einer großen GIF-Datei suchen *
608
17.1.6 Verzeichnisse rekursiv absteigen und leere Textdateien finden *
609
17.1.7 Eigene Utility-Bibliothek für Dateifilter entwickeln ***
609
17.2 Wahlfreier Zugriff auf Dateiinhalte
610
17.2.1 Letzte Zeile einer Textdatei ausgeben **
610
17.3 Lösungsvorschläge
611
18 Ein-/Ausgabeströme
625
18.1 Direkte Datenströme
627
18.1.1 Anzahl unterschiedlicher Stellen ermitteln (Dateien lesen) *
627
18.1.2 Python-Programm in Java konvertieren (Datei schreiben) *
627
18.1.3 Zielcode generieren (Datei schreiben) *
628
18.1.4 Dateiinhalt in Kleinbuchstaben konvertieren (Datei lesen und schreiben) *
630
18.1.5 PPM-Grafikformat in ASCII-Graustufen anzeigen ***
630
18.1.6 Dateien portionieren (Dateien lesen und schreiben) **
632
18.2 Ströme verschachteln
632
18.2.1 Quiz: DataInputStream und DataOutputStream *
632
18.2.2 Zahlenfolgen mit dem GZIPOutputStream komprimieren *
633
18.3 Serialisierung
633
18.3.1 Daten für den Chat (de)serialisieren und in Text umwandeln **
634
18.3.2 Quiz: Voraussetzung für das Serialisieren *
634
18.3.3 Letzte Eingaben sichern **
634
18.4 Lösungsvorschläge
635
19 Netzwerkprogrammierung
657
19.1 URL und URLConnection
658
19.1.1 Entfernte Bilder über die URL herunterladen *
658
19.1.2 Entfernte Textdatei über die URL einlesen *
658
19.2 HTTP-Client (Java 11)
660
19.2.1 Top-News von Hacker News **
660
19.3 Socket und ServerSocket
661
19.3.1 Einen Schimpfserver implementieren und den Client dazu **
661
19.3.2 Einen Port-Scanner implementieren **
661
19.4 Lösungsvorschläge
663
20 XML, JSON und weitere Datenformate mit Java verarbeiten
675
20.1 XML-Verarbeitung mit Java
676
20.1.1 XML-Datei mit Rezept schreiben *
676
20.1.2 Prüfen, ob alle Bilder ein alt-Attribut haben *
678
20.1.3 Java-Objekte mit JAXB schreiben *
678
20.1.4 Witze einlesen und herzlich lachen **
679
20.2 JSON
681
20.2.1 Hacker News: JSON auswerten *
682
20.2.2 Editor-Konfigurationen als JSON lesen und schreiben **
683
20.3 HTML
683
20.3.1 Mit jsoup Wikipedia-Bilder laden **
684
20.4 Office-Dokumente
684
20.4.1 Word-Dateien mit Screenshots generieren **
684
20.5 Archive
685
20.5.1 Insektengeräusche aus dem ZIP-Archiv abspielen **
685
20.6 Lösungsvorschläge
686
21 Datenbankzugriffe mit JDBC
703
21.1 Datenbankmanagementsysteme
704
21.1.1 H2-Datenbank vorbereiten *
704
21.2 Datenbankabfragen
704
21.2.1 Alle registrierten JDBC-Treiber abfragen *
705
21.2.2 Datenbank aufbauen und SQL-Skript ausführen *
705
21.2.3 Daten in die Datenbank einfügen *
707
21.2.4 Daten im Batch in die Datenbank einfügen *
707
21.2.5 Mit vorbereiteten Anweisungen Daten einfügen *
708
21.2.6 Daten erfragen *
709
21.2.7 Interaktiv durch das ResultSet scrollen *
709
21.2.8 Pirate Repository **
709
21.2.9 Spaltenmetadaten erfragen *
711
21.3 Lösungsvorschläge
712
22 Schnittstellen zum Betriebssystem
727
22.1 Konsole
728
22.1.1 Farbige Konsolenausgaben *
728
22.2 Properties
729
22.2.1 Windows oder Unix oder macOS? *
730
22.2.2 Kommandozeilen-Properties und Properties aus Dateien vereinheitlichen *
730
22.3 Externe Prozesse ausführen
731
22.3.1 Über Windows Management Instrumentation den Batteriestatus auslesen **
731
22.4 Lösungsvorschläge
732
23 Reflection, Annotationen und JavaBeans
741
23.1 Reflection-API
742
23.1.1 UML-Klassendiagramm mit Vererbungsbeziehungen erstellen *
742
23.1.2 UML-Klassendiagramm mit Eigenschaften erstellen *
743
23.1.3 CSV-Dateien aus Listeneinträgen generieren **
745
23.2 Annotationen
745
23.2.1 CSV-Dokumente aus annotierten Objektvariablen erzeugen **
745
23.3 Lösungsvorschläge
747
Nachwort
757
A Häufige Typen und Methoden im Java-Universum
759
A.1 Pakete mit den häufigsten Typen
759
A.2 Die 100 häufigsten Typen
761
A.3 Die 100 häufigsten Methoden
765
A.4 Die 100 häufigsten Methoden inklusive Parameterliste
769
Index
775