Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
1 Hello World!
23
1.1 Einführung
23
Warum Java?
24
Java-Versionen
25
Sicherheitsprobleme
27
Windows, Linux oder macOS?
27
1.2 Java und die IntelliJ IDEA installieren
28
1.3 Installation unter Windows
29
Path-Variable einstellen
30
Notepad++ und IntelliJ IDEA installieren
31
1.4 Installation unter Ubuntu Linux
32
Original-Java von Oracle installieren
32
IntelliJ IDEA installieren
33
1.5 Installation unter macOS
34
IntelliJ IDEA installieren
34
1.6 »Hello World« mit javac und java manuell übersetzen
34
Code verfassen und speichern
35
Das Programm kompilieren und ausführen
36
Der Hello-World-Code
38
Zulässige Codeänderungen
41
Java-Interna
42
1.7 Die Java-Shell
44
Fortgeschrittene Funktionen
45
1.8 Hello IntelliJ IDEA
46
JDK einrichten
47
Neues Projekt starten
48
Endlich Code
49
IntelliJ(gent) oder nicht – das ist hier die Frage ...
50
1.9 Wiederholungsfragen
51
2 Java-Crashkurs
52
2.1 Die Idee des objektorientierten Programmierens
52
Methoden helfen, Teilaufgaben zu lösen
53
Klassen bringen Daten und Methoden zusammen
53
Objekte sind konkrete Ausformungen von Klassen
54
Begriffe
55
2.2 Java-Syntax
57
Ärger mit Strichpunkten
58
Regeln zur Benennung von Variablen, Klassen etc.
59
Java-Schlüsselwörter
60
Kommentare im Java-Code
60
Die Java-Klassenbibliothek
61
Weniger Tippaufwand mit »import«
61
Klassen aus der Standardbibliothek verwenden
63
2.3 Wiederholungsfragen
64
3 Variablenverwaltung
65
3.1 Variablen
65
Einführungsbeispiel
65
Variablen deklarieren, initialisieren und verwenden
66
3.2 Elementare Datentypen
67
Ganze Zahlen
68
Fließkommazahlen
68
Rechnen mit »double«-Zahlen
70
Boolesche Werte
71
Zufallszahlen
71
Typumwandlung (Casting)
72
Modifizierer für die Variablendeklaration
73
3.3 Literale
75
Boolesche Literale
75
Ganze Zahlen
75
Fließkommazahlen
77
3.4 Variablen im größeren Java-Kontext
77
Gültigkeitsebenen
78
Variablen für Objekte
79
Wrapper-Klassen für elementare Datentypen
81
Instanzvariablen (Fields)
83
3.5 Variablen einlesen und ausgeben
83
Datenausgabe
84
Dateneingabe
85
Beispiel
85
3.6 Konstanten und Enums
87
Konstanten
87
Konstantenaufzählungen (Enums)
87
3.7 Wiederholungsfragen und Übungen
89
4 Operatoren
90
4.1 Überblick
90
4.2 Details und Sonderfälle
92
Zuweisungen
93
Mathematische Operatoren
93
Inkrement und Dekrement
95
Vergleiche
95
Boolesche Ausdrücke (verknüpfte Bedingungen)
96
Rechnen mit Bits
98
Sonstige Operatoren
99
4.3 Wiederholungsfragen
99
5 Verzweigungen und Schleifen
100
5.1 »if«-Verzweigungen
101
Lieber ein Klammernpaar zu viel als eines zu wenig!
102
Klare Logik durch richtiges Einrücken
104
Beispiel: Schaltjahrtest
104
5.2 »if«-Kurzschreibweise (ternärer Operator)
106
5.3 »switch«-Verzweigungen
107
Beispiel: Tage pro Monat
108
5.4 »for«-Schleifen
109
Achtung, Falle!
110
Variablendeklaration innerhalb der Schleife
111
Beispiele
112
»for«-Schleifen für Fließkommazahlen
113
Verschachtelte Schleifen
114
5.5 »for-each«-Schleifen
115
»for« versus »for-each«
116
5.6 »while«- und »do-while»-Schleifen
117
»while«-Schleifen
117
»do-while«-Schleifen
118
5.7 »break« und »continue«
119
break
119
continue
119
»break« und »continue« in verschachtelten Schleifen
120
Endlosschleifen
120
5.8 Wiederholungsfragen und Übungen
121
6 Arrays
122
6.1 Syntax
122
Arrays initialisieren
122
Zugriff auf Array-Elemente
123
Mehrdimensionale Arrays
124
Nichtrechteckige Arrays
124
Interna
125
6.2 Mit Arrays arbeiten
127
Methoden
127
Arrays duplizieren
128
Beispiel 1: Array initialisieren
128
Beispiel 2: Minimum, Maximum und Mittelwert
129
6.3 Wiederholungsfragen
130
7 Zeichenketten
132
7.1 Der Datentyp »char«
132
Die »Character«-Klasse und ihre Methoden
133
7.2 Die »String«-Klasse
134
»String«-Eigenheiten
135
Zeichenketten vergleichen
136
Zeichenketten korrekt ordnen und sortieren
137
»String«-Methoden
138
Die »join«-Methode
140
7.3 Formatierung und Konvertierung
141
Formatierung
141
Konvertierung von Zeichenketten in Zahlen
144
Lokalisierung von Ein- und Ausgabe
145
7.4 Die »StringBuilder«-Klasse
147
7.5 Zeichensatzprobleme
148
Quellcode
148
Textausgabe im Terminal
149
Zeichensatzeinstellung in Eclipse
150
7.6 Beispiele
150
Groß- und Kleinbuchstaben zählen
150
Pfad und Dateiname trennen
151
7.7 Wiederholungsfragen und Übungen
152
8 Datum und Uhrzeit
153
8.1 Datum und Zeit seit Java 8
154
»Machine Time Line« versus »Human Time Line«
154
Überblick über die Klassen und Methoden
155
Datum ermitteln, anzeigen und formatieren
157
Schaltjahr-spezifische Daten ermitteln
158
Uhrzeit ermitteln und anzeigen
159
Daten und Zeiten einlesen (»parse«)
159
Daten und Zeiten festlegen (»of«)
160
Zeitspannen ermitteln und auswerten
160
Rechnen mit Daten und Zeiten
161
Rechenzeit messen (Instant und Duration)
162
8.2 Veraltete Datums- und Zeitklassen (Date, Calendar)
163
Die »Date«-Klasse
163
Formatierung mit »format« bzw. »printf«
165
Formatierung mit der »SimpleDateFormat«-Klasse
165
Die »Calendar«-Klasse
168
Umwandlung von »Date« zu »LocalDate«
171
8.3 Wiederholungsfragen und Übungen
171
9 Methoden
172
9.1 Einführung
173
Syntaxregeln
174
Statisch oder nichtstatisch?
175
9.2 Parameterliste
176
Parameter verändern
176
Finale Parameter
179
Overloading
179
Variable Parameterzahl
180
9.3 Rückgabewert und »return«
182
9.4 Rekursion
183
Fakultät rekursiv berechnen
183
Der Stack
184
9.5 Beispiele
185
Array-Methoden: Minimum und Maximum ermitteln
185
Wir spielen Lotto
186
9.6 Wiederholungsfragen und Übungen
189
10 Exceptions
192
10.1 Exception-Klassen
193
Die »Throwable«-Klasse
193
Die »Error«-Klassen
194
Die »RuntimeException«-Klassen
194
Gewöhnliche Exceptions
195
10.2 try-catch
195
»try-catch« für Ressourcen
196
Exception-Weitergabe
197
10.3 Fehleranfällige Methoden deklarieren (»throws«)
198
Selbst absichern oder die Absicherung delegieren?
199
10.4 Selbst Exceptions werfen (»throw«)
200
10.5 Beispiel
201
10.6 Wiederholungsfragen und Übungen
203
11 Klassen
204
11.1 Top-Level-Klassen
205
Beispiel: Rechteck-Klasse
206
Gültigkeitsebenen (»public«, »private« und »protected«)
209
Klassenvariablen und statische Methoden
210
Konstruktor
213
this
214
Beispiel: Rechteck-Klasse mit Konstruktor
215
Destruktor, »finalize« und »close«
216
»get«- und »set«-Methoden (Getter/Setter)
217
Beispiel: Rechteck-Klasse mit Getter/Setter
218
11.2 Geschachtelte Klassen
220
Die Syntax geschachtelter Klassen
220
Geschachtelte Schnittstellen und Enums
222
11.3 Anonyme Klassen
222
Beispiel: »FilenameFilter«
223
Syntax
225
Variable Capture
226
11.4 Statische geschachtelte Klassen
227
11.5 Beispiel: Schachfigur Springer
228
Aufgabenstellung
228
Implementierung der »Springer«-Klasse
230
Die Methode »ermittleZuege«
231
Test
232
11.6 Beispiel: Bücher und Kapitel
233
Chapter-Klasse
233
Book-Klasse
234
Test-Code
236
11.7 Wiederholungsfragen und Übungen
237
12 Vererbung und Schnittstellen
239
12.1 Vererbung
240
Methoden überschreiben
240
Instanz- und Klassenvariablen verstecken
242
super
242
Konstruktor
243
Finale Klassen und Methoden
244
Abstrakte Klassen
245
Generalisierung
246
Polymorphie
247
Upcasts und Downcasts
250
12.2 Die »Object«-Klasse
250
Die Methode »clone«
251
Die Methode »equals«
251
Die Methode »finalize«
252
Die Methode »getClass«
252
Die Methode »hashCode«
252
Die Methoden »notify«, »notifyAll« und »wait«
254
Die Methode »toString«
254
12.3 Vererbungsbeispiel (Schachfiguren)
254
Die abstrakte Klasse »Schachfigur«
255
Die Klassen »Springer«, »Laeufer« und »Turm«
257
Anwendung der Klassen
258
12.4 Schnittstellen
259
Einführungsbeispiel
259
Wichtige Schnittstellen in der Java-Standardbibliothek
260
»interface«-Syntax
261
Funktionale Schnittstellen und Defaultmethoden
262
Die »implements«-Syntax
263
Polymorphie bei Schnittstellen
264
Abstrakte Klassen versus Schnittstellen
264
12.5 Schnittstellenbeispiel (geometrische Figuren)
265
Rechteck- und Kreis-Klasse
265
Anwendung der Klassen
266
12.6 Wiederholungsfragen und Übungen
268
13 Generische Klassen und Methoden
270
13.1 Einführung
270
Hello Generics World!
270
Wrapper-Klassen
272
13.2 Deklaration generischer Klassen und Schnittstellen
272
Typeinschränkungen
273
Generische Schnittstellen und Vererbung
274
13.3 Deklaration generischer Methoden
274
13.4 Wildcards
275
Wildcard-Variablen und -Parameter
276
Wildcards mit Regeln
277
Upper Bounded Wildcards
278
Lower Bounded Wildcards
279
Arrays
279
13.5 Genercis-Beispiel (Comparable)
280
Die »Geometrie«-Schnittstelle erweitern
281
Die »Kreis«-Klasse erweitern
281
Die »Rechteck«-Klasse erweitern
282
Die »Comparable«-Objekte sortieren
283
»Comparable« versus »Comparator«
283
13.6 Wiederholungsfragen und Übungen
285
14 Lambda-Ausdrücke
286
14.1 Hello Lambda-World!
286
Ein Blick hinter die Kulissen
287
14.2 Lambda & Co.
288
Die Syntax von Lambda-Ausdrücken
288
»this« und »super«
290
Referenzen auf Methoden
290
Beispiel für Referenzen auf Methoden
292
Defaultmethoden
294
Generische Lambda-Schnittstellen
295
Beispiel: Datenselektion mit der »Predicate«-Schnittstelle
296
War das schon alles?
298
14.3 Wiederholungsfragen
298
15 Collections
300
15.1 Einführung
300
Koordinatenpunkte eines Polygons speichern (»List«)
301
Lottozahlen generieren (»Set«)
302
Wörterbuch speichern (»Map«)
302
Klassenüberblick
303
Regeln, Tipps und Tricks
305
15.2 Die »Iterable«-Schnittstelle
307
Die »forEach«-Methode
308
15.3 Die »Collection«-Schnittstelle
309
Die »removeIf«- und »stream«-Methoden
311
15.4 Die »Set«-Schnittstelle
312
Die »HashSet«-Klasse
312
Die »LinkedHashSet«-Klasse
314
Die »TreeSet«-Klasse
315
15.5 Die »List«-Schnittstelle
317
Die »replaceAll«-Methode
318
Die »ArrayList«-Klasse
318
Die »LinkedList«-Klasse
319
15.6 Die »Stream«-Schnittstelle
320
Stream-Beispiele
321
15.7 Die »Map«-Schnittstelle
324
Die »HashMap«- und »LinkedHashMap«-Klassen
326
Schleifen über Maps
326
15.8 Wiederholungsfragen und Übungen
328
16 Dateien und Verzeichnisse
329
16.1 Klassen- und Schnittstellenüberblick
329
Fehlerabsicherung
330
Ressourcen schließen
331
16.2 Dateien und Verzeichnisse ergründen
331
Besondere Verzeichnisse
331
Die »Path«-Schnittstelle
332
Testen, ob ein Verzeichnis bzw. eine Datei existiert
334
Eigenschaften einer Datei ermitteln
335
Liste der Dateien in einem Verzeichnis ermitteln
337
16.3 Dateien und Verzeichnisse bearbeiten
339
Beispiel
340
16.4 Textdateien lesen und schreiben
341
Textdateien schreiben
342
Textdateien auslesen
343
Andere Zeichensätze als UTF-8 verwenden
345
16.5 Wiederholungsaufgaben und Übungen
346
17 JavaFX
347
17.1 Einführung
348
Ein erster Blick hinter die Kulissen
349
Der Scene Graph
350
17.2 Arbeiten mit Steuerelementen
350
Der Scene Graph des Beispielprogramms
352
Steuerelemente und Container erzeugen
353
Ereignisse
357
17.3 Grafikprogrammierung
359
Einführungsbeispiel
359
Den Zufall zeichnen lassen
362
Lissajous-Figuren zeichnen
363
17.4 Mehr JavaFX
366
17.5 Wiederholungsaufgaben und Übungen
366
18 Javadoc
367
18.1 Javadoc-Syntax
367
Beispiel
368
18.2 Das Javadoc-Kommando
371
18.3 Übung
371
19 Pakete, Bibliotheken und Module
372
19.1 import
373
Die »import«-Syntax
373
Standard-Import für »java.lang«
374
Statische Importe
374
19.2 Pakete
375
19.3 Bibliotheken
377
Fertige Java-Bibliotheken nutzen
377
19.4 Module (»Jigsaw«)
379
Beispiel
380
Die Datei »module-info.java«
381
Kompilieren und ausführen
382
Module in der IntelliJ IDEA
383
19.5 Wiederholungsfragen
384
A Crashkurs IntelliJ IDEA
385
A.1 Benutzeroberfläche
385
A.2 Projekte
391
A.3 Einstellungen
394
B Lösungen
397
B.1 Kapitel 1, »Hello World!«
397
B.2 Kapitel 2, »Java-Crashkurs«
399
B.3 Kapitel 3, »Variablenverwaltung«
401
B.4 Kapitel 4, »Operatoren«
403
B.5 Kapitel 5, »Verzweigungen und Schleifen«
404
B.6 Kapitel 6, »Arrays«
406
B.7 Kapitel 7, »Zeichenketten«
407
B.8 Kapitel 8, »Datum und Uhrzeit«
408
B.9 Kapitel 9, »Methoden«
408
B.10 Kapitel 10, »Exceptions«
410
B.11 Kapitel 11, »Klassen«
411
B.12 Kapitel 12, »Vererbung und Schnittstellen«
414
B.13 Kapitel 13, »Generische Klassen und Methoden«
416
B.14 Kapitel 14, »Lambda-Ausdrücke«
417
B.15 Kapitel 15, »Collections«
418
B.16 Kapitel 16, »Dateien und Verzeichnisse«
419
B.17 Kapitel 17, »JavaFX«
421
B.18 Kapitel 18, »Javadoc«
423
B.19 Kapitel 19, »Pakete, Bibliotheken und Module«
424
Index
426