Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Vorwort
21
1 Hello World!
23
1.1 Einführung
23
1.2 Java installieren
24
Welche Versionsnummer?
25
Alternative JDKs
26
1.3 IntelliJ IDEA
27
IntelliJ installieren
27
»Hello World!« in IntelliJ
28
Endlich Code
30
Beispieldateien öffnen
31
1.4 Der Hello-World-Code
33
1.5 Alternativen zu IntelliJ
36
Visual Studio Code
36
Editoren ohne Java-Unterstützung
37
2 Java-Crashkurs
38
2.1 Die Idee des objektorientierten Programmierens
38
Methoden helfen, Teilaufgaben zu lösen
39
Klassen bringen Daten und Methoden zusammen
39
Objekte sind konkrete Ausformungen von Klassen
40
Begriffe
41
2.2 Java-Syntax
43
Ärger mit Strichpunkten
44
Regeln zur Benennung von Variablen, Klassen etc.
45
Java-Schlüsselwörter
45
Kommentare im Java-Code
46
Die Java-Standardbibliothek
46
Weniger Tippaufwand mit »import«
47
»import« muss vor der Klassendefinition stehen!
47
2.3 Wiederholungsfragen
48
3 Variablenverwaltung
49
3.1 Variablen
49
Einführungsbeispiel
49
Variablen deklarieren, initialisieren und verwenden
50
Variablendeklaration ohne Typangabe (»var«)
51
Einschränkungen für »var«
52
3.2 Elementare Datentypen
53
Ganze Zahlen
53
Fließkommazahlen
54
Rechnen mit »double«-Zahlen
55
Boolesche Werte
56
Zufallszahlen
56
Typumwandlung (Casting)
57
Modifizierer für die Variablendeklaration
58
3.3 Literale
59
Literale für ganze Zahlen
60
Literale für Fließkommazahlen
61
3.4 Variablen einlesen und ausgeben
62
Datenausgabe
62
Dateneingabe
63
Beispiel
64
3.5 Variablen im größeren Java-Kontext
65
Gültigkeitsebenen
66
Variablen für Objekte
67
Wrapper-Klassen für elementare Datentypen
69
3.6 Konstanten und Enums
71
Konstantenaufzählungen (Enums)
71
3.7 Wiederholungsfragen und Übungen
73
4 Operatoren
74
4.1 Überblick
74
4.2 Details und Sonderfälle
76
Zuweisungen
77
Mathematische Operatoren
77
Inkrement und Dekrement
78
Vergleiche
79
Boolesche Ausdrücke (verknüpfte Bedingungen)
80
Rechnen mit Bits
82
Sonstige Operatoren
83
4.3 Wiederholungsfragen
83
5 Verzweigungen und Schleifen
84
5.1 »if«-Verzweigungen
85
Lieber ein Klammernpaar zu viel als eines zu wenig!
86
Klare Logik durch richtiges Einrücken
87
Beispiel: Schaltjahrtest
88
5.2 »if«-Kurzschreibweise (ternärer Operator)
90
5.3 »switch«-Verzweigungen
91
Beispiel: Tage pro Monat
92
Alternative »switch«-Syntax seit Java 12
93
5.4 »for«-Schleifen
94
Achtung, Falle!
96
Variablendeklaration innerhalb der Schleife
96
Beispiele
97
»for«-Schleifen für Fließkommazahlen
98
Verschachtelte Schleifen
100
5.5 »for-each«-Schleifen
101
»for« versus »for-each«
102
5.6 »while«- und »do-while»-Schleifen
102
»while«-Schleifen
102
»do-while«-Schleifen
103
5.7 »break« und »continue«
104
break
104
continue
104
»break« und »continue« in verschachtelten Schleifen
105
Endlosschleifen
105
5.8 Wiederholungsfragen und Übungen
106
6 Arrays
108
6.1 Syntax
108
Arrays initialisieren
108
Deklaration und Initialisierung mit »var«
109
Zugriff auf Array-Elemente
110
Mehrdimensionale Arrays
110
Nichtrechteckige Arrays
111
Interna
113
6.2 Mit Arrays arbeiten
114
Arrays duplizieren
116
Beispiel 1: Array initialisieren
116
Beispiel 2: Minimum, Maximum und Mittelwert
116
6.3 Wiederholungsfragen
118
7 Zeichenketten
119
7.1 Der Datentyp »char«
119
Die »Character«-Klasse und ihre Methoden
120
7.2 Die »String«-Klasse
121
Mehrzeilige Zeichenketten
122
»String«-Eigenheiten
123
Zeichenketten vergleichen
123
Zeichenketten korrekt ordnen und sortieren
125
»String«-Methoden
126
Die »join«-Methode
128
Die Methoden »trim«, »strip« und »isBlank«
129
7.3 Formatierung und Konvertierung
129
Formatierung
129
Konvertierung von Zeichenketten in Zahlen
132
Lokalisierung von Ein- und Ausgabe
132
Umwandlung zwischen char-Arrays und Zeichenketten
134
7.4 Die »StringBuilder«-Klasse
135
7.5 Beispiele
136
Groß- und Kleinbuchstaben zählen
136
Pfad und Dateiname trennen
137
Palindrom-Test
138
7.6 Wiederholungsfragen und Übungen
139
8 Methoden
140
8.1 Einführung
141
Syntaxregeln
142
Statisch oder nichtstatisch?
143
8.2 Parameterliste
144
Parameter verändern
144
Finale Parameter
147
Overloading
147
Variable Parameterzahl
148
8.3 Rückgabewert und »return«
150
Klarerer Code durch »return«
151
8.4 Rekursion
152
Fakultät rekursiv berechnen
152
Der Stack
153
8.5 Tipps zum richtigen Einsatz von Methoden
154
Design von Methoden
154
Wann organisieren Sie Ihren Code in Methoden?
154
8.6 Beispiele
155
Array-Methoden: Minimum und Maximum ermitteln
155
Wir spielen Lotto
156
Array-Suche
159
CSS-Farbcodes validieren
160
Freie Plätze im Kino suchen
162
8.7 Wiederholungsfragen und Übungen
164
9 Datum und Uhrzeit
168
9.1 Datum und Zeit seit Java 8
169
»Machine Time Line« versus »Human Time Line«
169
Überblick über die Klassen und Methoden
170
Datum ermitteln, anzeigen und formatieren
172
Schaltjahr-spezifische Daten ermitteln
173
Uhrzeit ermitteln und anzeigen
174
Daten und Zeiten einlesen (»parse«)
174
Daten und Zeiten festlegen (»of«)
175
Zeitspannen ermitteln und auswerten
175
Rechnen mit Daten und Zeiten
176
Rechenzeit messen (Instant und Duration)
177
9.2 Veraltete Datums- und Zeitklassen (Date, Calendar)
178
Die »Date«-Klasse
178
Formatierung mit »format« bzw. »printf«
180
Formatierung mit der »SimpleDateFormat«-Klasse
180
Die »Calendar«-Klasse
183
Umwandlung von »Date« zu »LocalDate«
186
9.3 Wiederholungsfragen und Übungen
186
10 Exceptions
187
10.1 Exception-Klassen
188
Die »Throwable«-Klasse
188
Die »Error«-Klassen
189
Die »RuntimeException«-Klassen
189
Gewöhnliche Exceptions
190
10.2 try-catch
190
»try-catch« für Ressourcen
192
Exception-Weitergabe
192
10.3 Fehleranfällige Methoden deklarieren (»throws«)
194
Selbst absichern oder die Absicherung delegieren?
194
10.4 Selbst Exceptions auslösen (»throw«)
195
10.5 Beispiel
196
10.6 Wiederholungsfragen und Übungen
199
11 Klassen und Records
201
11.1 Eigene Klassen entwickeln
202
Korrekte Platzierung von Klassen im Paket
203
Top-Level-Klassen
204
Aufbau von Klassen
204
Beispiel: Rechteck-Klasse
205
Gültigkeitsebenen (»public«, »private« und »protected«)
208
Klassenvariablen und statische Methoden
210
11.2 Der Konstruktor
212
this
214
Destruktor und »close«
215
Beispiel: Rechteck-Klasse mit Konstruktor
216
11.3 »get«- und »set«-Methoden (Getter/Setter)
217
Beispiel: Rechteck-Klasse mit Getter/Setter
218
11.4 Records
220
Record-Syntax
221
Records als »Data Transfer Objects«
222
Records versus Klassen
223
11.5 UML-Diagramme
224
11.6 Beispiel: Bücher und Kapitel
225
Chapter-Klasse
225
Book-Klasse
226
Testcode
228
11.7 Wiederholungsfragen und Übungen
229
12 Listen, Sets und Maps
232
12.1 Generische Klassen anwenden
233
Wrapper-Klassen für elementare Datentypen
235
12.2 Listen
236
Collections-Methoden
237
Die »LinkedList«-Klasse
238
12.3 Sets
238
Lottozahlen
240
12.4 Maps
241
12.5 Beispiel: Polygone
243
Klasse »Point«
244
Klasse »Polygon«
245
Testcode
247
12.6 Beispiel: Schachfigur Springer
247
Klasse »Position«
249
Klasse »Knight«
251
12.7 Beispiel: Mitarbeiter verwalten
253
Rekursive Auswertung hierarchischer Strukturen
254
12.8 Wiederholungsfragen und Übungen
257
13 Vererbung
258
13.1 Vererbung
258
Methoden überschreiben
259
super
261
Konstruktor
262
Gültigkeitsmodifizierer
262
13.2 Beispiel: Klassen für Fahrräder
263
Basisklasse »Bicycle«
263
Erweiterte Klasse »MountainBike«
264
Erweiterte Klasse »EBike«
265
13.3 Finale und abstrakte Klassen
266
Mehrstufige Vererbung und Mehrfachvererbung
266
Instanzvariablen überschreiben
267
Finale Klassen und Methoden
267
Abstrakte Klassen
268
Generalisierung
270
Upcasts und Downcasts
271
Polymorphie
272
13.4 Die »Object«-Klasse
274
Die Methode »clone«
274
Die Methode »equals«
274
Die Methode »getClass«
275
Die Methode »hashCode«
275
Die Methode »toString«
276
Beispiel: »equals« und »hashCode« für »Rectangle«
276
13.5 Beispiel: Schachfiguren
279
Die abstrakte Klasse »Piece«
279
Die Klassen »Knight«, »Bishop« und »Rook«
281
Anwendung der Klassen
282
13.6 Wiederholungsfragen und Übungen
283
14 Schnittstellen
286
14.1 »interface« und »implements«
286
Wichtige Schnittstellen in der Java-Standardbibliothek
288
Schnittstellen implementieren (»implements«)
289
Generalisierung
290
Abstrakte Klassen versus Schnittstellen
290
14.2 Beispiel: Geometrische Figuren
291
Die Klassen »Circle« und »Rectangle«
292
Anwendung
293
Codeoptimierung
294
14.3 Wiederholungsfragen und Übungen
295
15 Geschachtelte und anonyme Klassen
296
15.1 Geschachtelte Klassen
297
Geschachtelte Schnittstellen und Enums
298
15.2 Anonyme Klassen
299
Beispiel: »FilenameFilter«
299
Variante 1: Geschachtelte Klasse
299
Variante 2: Anonyme Klasse
301
Variante 3: Lambda-Ausdruck
302
Syntax
303
Variable Capture
303
Interna
304
15.3 Statische geschachtelte Klassen
305
16 Generische Klassen und Methoden
307
16.1 Einführung
307
Hello Generics World!
307
16.2 Deklaration generischer Klassen und Schnittstellen
309
Typeinschränkungen
310
Generische Schnittstellen und Vererbung
310
16.3 Deklaration generischer Methoden
311
16.4 Wildcards
312
Wildcard-Parameter
313
Wildcards mit Regeln
313
Upper-Bounded Wildcards
314
Lower-Bounded Wildcards
315
Arrays
316
16.5 Wiederholungsfragen und Übungen
317
17 Lambda-Ausdrücke
318
17.1 Hello Lambda World!
318
Ein Blick hinter die Kulissen
319
17.2 Lambda-Syntax
320
»this« und »super«
321
Referenzen auf Methoden
322
Beispiel für Referenzen auf Methoden
324
17.3 Generische Lambda-Schnittstellen
325
Beispiel: Datenselektion mit der »Predicate«-Schnittstelle
326
17.4 Funktionale Programmierung mit Streams
328
Streams ausprobieren
330
Probleme mit Variablen, die nicht »effectively final« sind
333
17.5 Beispiel: Mitarbeiter sortieren und auswählen
334
Mitarbeiter selektieren
336
17.6 Wiederholungsfragen
336
18 Dateien und Verzeichnisse
338
18.1 Klassen- und Schnittstellenüberblick
338
Fehlerabsicherung
339
Ressourcen schließen
340
18.2 Dateien und Verzeichnisse ergründen
340
Besondere Verzeichnisse
340
Die »Path«-Schnittstelle
341
Testen, ob ein Verzeichnis bzw. eine Datei existiert
343
Eigenschaften einer Datei ermitteln
344
Liste der Dateien in einem Verzeichnis erzeugen
345
18.3 Dateien und Verzeichnisse bearbeiten
347
Beispiel
348
18.4 Textdateien lesen und schreiben
350
Textdateien schreiben
350
Textdateien auslesen
352
18.5 Beispiel: Evaluierungsdaten auswerten
353
Klasse »EvaluationRecord«
353
Statistische Auswertung der Evaluierung
356
18.6 Wiederholungsaufgaben und Übungen
357
19 JavaFX
359
19.1 Hello JavaFX!
359
Projektaufbau vereinfachen
361
Ein erster Blick hinter die Kulissen
362
Der Scene Graph
364
19.2 Arbeiten mit Steuerelementen
364
Der Scene Graph des Beispielprogramms
366
Steuerelemente und Container erzeugen
367
Ereignisse
370
19.3 Grafikprogrammierung
372
Einführungsbeispiel
373
Den Zufall zeichnen lassen
375
Lissajous-Figuren zeichnen
377
19.4 Wiederholungsaufgaben und Übungen
379
20 Java-Interna und -Bibliotheken
380
20.1 Java-Compiler und -Interpreter
381
Windows-Path-Konfiguration
382
Nochmals »Hello World!«
384
Interna: Compiler, Interpreter und Bytecode
385
20.2 Der »args«-Parameter
386
Beispiel: Passwortgenerator
387
Programm kompilieren und ausführen
388
20.3 Die Java-Shell
389
Fortgeschrittene Funktionen
390
20.4 import
391
Die »import«-Syntax
391
Standard-Import für »java.lang«
392
Statische Importe
392
20.5 Pakete
393
20.6 Bibliotheken
395
Fertige Java-Bibliotheken nutzen
396
IntelliJ und Gradle
397
20.7 Module (»Jigsaw«)
400
Beispiel
401
Welche Module sind erforderlich?
402
20.8 Wiederholungsfragen
403
A Crashkurs IntelliJ IDEA
404
A.1 Benutzeroberfläche
404
A.2 Projekte
410
A.3 Einstellungen
411
B Lösungen
415
B.1 Kapitel 2, »Java-Crashkurs«
415
B.2 Kapitel 3, »Variablenverwaltung«
417
B.3 Kapitel 4, »Operatoren«
419
B.4 Kapitel 5, »Verzweigungen und Schleifen«
420
B.5 Kapitel 6, »Arrays«
422
B.6 Kapitel 7, »Zeichenketten«
423
B.7 Kapitel 8, »Methoden«
425
B.8 Kapitel 9, »Datum und Uhrzeit«
429
B.9 Kapitel 10, »Exceptions«
429
B.10 Kapitel 11, »Klassen«
432
B.11 Kapitel 12, »Listen, Sets und Maps«
435
B.12 Kapitel 13, »Vererbung«
439
B.13 Kapitel 14, »Schnittstellen«
441
B.14 Kapitel 16, »Generische Klassen und Methoden«
442
B.15 Kapitel 17, »Lambda-Ausdrücke«
442
B.16 Kapitel 18, »Dateien und Verzeichnisse«
445
B.17 Kapitel 19, »JavaFX«
447
B.18 Kapitel 20, »Java-Interna und -Bibliotheken«
449
Index
453