Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Vorwort
21
1 Hello World!
23
1.1 Einführung
23
Wozu programmieren lernen?
23
Warum Java?
24
Java-Versionen
25
Sicherheitsprobleme
27
Windows, Linux oder OS X?
28
1.2 Java und Eclipse installieren
28
1.3 Installation unter Windows
29
JDK-Installation
29
Path-Variable einstellen
29
Notepad++ und Eclipse installieren
31
1.4 Installation unter Ubuntu Linux
33
Pakete der Distribution installieren
33
Original-Java von Oracle installieren
34
Eclipse installieren
34
1.5 Installation unter OS X
35
Java installieren
35
Eclipse installieren
36
1.6 »Hello World« mit javac und java manuell übersetzen
37
Code verfassen und speichern
37
Das Programm kompilieren und ausführen
38
Der Hello-World-Code
40
Zulässige Codeänderungen
43
Java-Interna
45
1.7 Hello World mit Eclipse
46
Projekt erzeugen
46
Klasse erzeugen
47
Code in Eclipse verfassen
49
Code ausführen
50
1.8 Java-Crashkurs
51
Elementare Syntaxregeln
51
Ärger mit Strichpunkten
53
Regeln zur Benennung von Variablen, Klassen etc.
54
Java-Schlüsselwörter
55
Kommentare im Java-Code
55
Klassen der Java-Klassenbibliothek nutzen
56
Weniger Tippaufwand mit »import«
58
1.9 Wiederholungsfragen
60
2 Variablenverwaltung
61
2.1 Variablen
61
Einführungsbeispiel
61
Variablen deklarieren, initialisieren und verwenden
62
2.2 Elementare Datentypen
63
Ganze Zahlen
64
Fließkommazahlen
64
Rechnen mit »double«-Zahlen
66
Boolesche Werte
67
Zufallszahlen
67
Typumwandlung (Casting)
68
Modifizierer für die Variablendeklaration
69
2.3 Literale
71
Boolesche Literale
71
Ganze Zahlen
71
Fließkommazahlen
73
2.4 Variablen im größeren Java-Kontext
73
Gültigkeitsebenen
74
Objektvariablen
75
Wrapper-Klassen elementare Datentypen
77
Klassenvariablen (Fields)
79
2.5 Variablen einlesen und ausgeben
80
Datenausgabe
80
Dateneingabe
81
Beispiel
82
2.6 Konstanten und Enums
82
Konstanten
83
Konstantenaufzählungen (Enums)
84
2.7 Wiederholungsfragen und Übungen
85
3 Operatoren
87
3.1 Überblick
87
3.2 Details und Sonderfälle
89
Zuweisungen
90
Mathematische Operatoren
90
Inkrement und Dekrement
92
Vergleiche
92
Boolesche Ausdrücke (verknüpfte Bedingungen)
93
Rechnen mit Bits
95
Sonstige Operatoren
96
3.3 Wiederholungsfragen
96
4 Verzweigungen und Schleifen
97
4.1 »if«-Verzweigungen
98
Lieber ein Klammernpaar zu viel als eines zu wenig!
99
Klare Logik durch richtiges Einrücken
101
Beispiel: Schaltjahrtest
101
4.2 »if«-Kurzschreibweise (ternärer Operator)
103
4.3 »switch«-Verzweigungen
104
Beispiel: Tage pro Monat
105
4.4 »for«-Schleifen
106
Achtung, Falle!
107
Variablendeklaration innerhalb der Schleife
108
Beispiele
109
»for«-Schleifen für Fließkommazahlen
110
Verschachtelte Schleifen
111
4.5 »for-each«-Schleifen
112
»for« versus »for-each«
113
4.6 »while«- und »do-while»-Schleifen
114
»while«-Schleifen
114
»do-while«-Schleifen
115
4.7 »break« und »continue«
116
break
116
continue
116
»break« und »continue« in verschachtelten Schleifen
117
Endlosschleifen
117
4.8 Wiederholungsfragen und Übungen
118
5 Arrays
119
5.1 Syntax
119
Arrays initialisieren
119
Zugriff auf Array-Elemente
120
Mehrdimensionale Arrays
121
Nichtrechteckige Arrays
121
Interna
122
5.2 Mit Arrays arbeiten
124
Methoden
124
Arrays duplizieren
125
Beispiel 1: Array initialisieren
125
Beispiel 2: Minimum, Maximum und Mittelwert
126
5.3 Wiederholungsfragen
127
6 Zeichenketten
129
6.1 Der Datentyp »char«
129
Die »Character«-Klasse und ihre Methoden
130
6.2 Die »String«-Klasse
131
»String«-Eigenheiten
132
Zeichenkette vergleichen
133
Zeichenketten korrekt ordnen und sortieren
134
»String«-Methoden
135
Die »join«-Methode
137
6.3 Formatierung und Konvertierung
138
Formatierung
138
Konvertierung von Zeichenketten in Zahlen
141
Lokalisierung von Ein- und Ausgabe
142
6.4 Die »StringBuilder«-Klasse
144
6.5 Zeichensatzprobleme
145
Quellcode
145
Textausgabe im Terminal
146
Zeichensatzeinstellung in Eclipse
147
6.6 Beispiele
147
Groß- und Kleinbuchstaben zählen
147
Pfad und Dateiname trennen
148
6.7 Wiederholungsfragen und Übungen
149
7 Datum und Uhrzeit
150
7.1 Datum und Zeit in Java 8
151
»Machine Time Line« versus »Human Time Line«
151
Überblick über die Klassen und Methoden
152
Datum ermitteln, anzeigen und formatieren
154
Schaltjahr-spezifische Daten ermitteln
155
Uhrzeit ermitteln und anzeigen
156
Daten und Zeiten einlesen (»parse«)
156
Daten und Zeiten festlegen (»of«)
157
Zeitspannen ermitteln und auswerten
157
Rechnen mit Daten und Zeiten
158
Rechenzeit messen (Instant und Duration)
159
7.2 Veraltete Datums- und Zeitklassen (Date, Calendar)
160
Die »Date«-Klasse
160
Formatierung mit »format« bzw. »printf«
162
Formatierung mit der »SimpleDateFormat«-Klasse
162
Die »Calendar«-Klasse
165
Umwandlung von »Date« zu »LocalDate«
168
7.3 Wiederholungsfragen und Übungen
168
8 Methoden
169
8.1 Einführung
170
Syntaxregeln
171
Statisch oder nichtstatisch?
172
8.2 Parameterliste
173
Parameter verändern
173
Finale Parameter
176
Overloading
176
Variable Parameterzahl
177
8.3 Rückgabewert und »return«
179
8.4 Rekursion
180
Fakultät rekursiv berechnen
180
Der Stack
181
8.5 Beispiele
182
Array-Methoden: Minimum und Maximum ermitteln
182
Wir spielen Lotto
183
8.6 Wiederholungsfragen und Übungen
186
9 Exceptions
189
9.1 Exception-Klassen
190
Die »Throwable«-Klasse
190
Die »Error«-Klassen
191
Die »RuntimeException«-Klassen
191
Gewöhnliche Exceptions
192
9.2 try-catch
192
»try-catch« für Ressourcen
194
Exception-Weitergabe
194
9.3 Fehleranfällige Methoden deklarieren (»throws«)
196
Selbst absichern oder die Absicherung delegieren?
196
9.4 Selbst Exceptions werfen (»throw«)
197
9.5 Beispiel
198
9.6 Wiederholungsfragen und Übungen
200
10 Klassen
202
10.1 Top-Level-Klassen
203
Beispiel: Rechteck-Klasse
204
Gültigkeitsebenen (»public«, »private« und »protected«)
207
Statische Klassenvariablen und Methoden
208
Konstruktor
211
this
212
Beispiel: Rechteck-Klasse mit Konstruktor
213
Destruktor, »finalize« und »close«
214
»get«- und »set«-Methoden (Getter/Setter)
215
Beispiel: Rechteck-Klasse mit Getter/Setter
216
10.2 Lokale Klassen
218
Die Syntax lokaler Klassen
218
Lokale Schnittstellen und Enums
220
10.3 Anonyme Klassen
220
Beispiel: »FilenameFilter«
221
Syntax
223
Variable Capture
224
10.4 Statische geschachtelte Klassen
225
10.5 Beispiel: Schachfigur Springer
226
Aufgabenstellung
226
Implementierung der »Springer«-Klasse
228
Die Methode »ermittleZuege«
229
Test
230
10.6 Wiederholungsfragen und Übungen
231
11 Vererbung und Schnittstellen
234
11.1 Vererbung
235
Methoden überschreiben
235
super
237
Konstruktor
237
Finale Klassen und Methoden
238
Abstrakte Klassen
239
Generalisierung
240
Polymorphie
241
Upcasts und Downcasts
244
11.2 Die »Object«-Klasse
244
Die Methode »clone«
245
Die Methode »equals«
245
Die Methode »finalize«
246
Die Methode »getClass«
246
Die Methode »hashCode«
246
Die Methoden »notify«, »notifyAll« und »wait«
248
Die Methode »toString«
248
11.3 Vererbungsbeispiel (Schachfiguren)
248
Die abstrakte Klasse »Schachfigur«
249
Die Klassen »Springer«, »Laeufer« und »Turm«
251
Anwendung der Klassen
252
11.4 Schnittstellen
253
Einführungsbeispiel
253
Wichtige Schnittstellen in der Java-Standardbibliothek
254
»interface«-Syntax
255
Funktionale Schnittstellen und Default-Methoden
256
Die »implements«-Syntax
257
Polymorphie bei Schnittstellen
258
Abstrakte Klassen versus Schnittstellen
258
11.5 Schnittstellenbeispiel (geometrische Figuren)
259
Rechteck- und Kreis-Klasse
259
Anwendung der Klassen
260
11.6 Wiederholungsfragen und Übungen
262
12 Generische Klassen und Methoden
264
12.1 Einführung
264
Hello Generics World!
264
Wrapper-Klassen
266
12.2 Deklaration generischer Klassen und Schnittstellen
266
Typeinschränkungen
267
Generische Schnittstellen und Vererbung
268
12.3 Deklaration generischer Methoden
268
12.4 Wildcards
269
Wildcard-Variablen und -Parameter
270
Wildcards mit Regeln
271
Upper Bounded Wildcards
272
Lower Bounded Wildcards
273
Arrays
273
12.5 Genercis-Beispiel (Comparable)
274
Die »Geometrie«-Schnittstelle erweitern
275
Die »Kreis«-Klasse erweitern
275
Die »Rechteck«-Klasse erweitern
276
Die »Comparable«-Objekte sortieren
277
»Comparable« versus »Comparator«
277
12.6 Wiederholungsfragen und Übungen
279
13 Lambda-Ausdrücke
280
13.1 Hello Lambda-World!
280
Ein Blick hinter die Kulissen
281
13.2 Lambda & Co.
282
Die Syntax von Lambda-Ausdrücken
282
»this« und »super«
284
Referenzen auf Methoden
284
Beispiel für Referenzen auf Methoden
286
Default-Methoden
288
Generische Lambda-Schnittstellen
289
Beispiel: Datenselektion mit der »Predicate«-Schnittstelle
290
War das schon alles?
292
13.3 Wiederholungsfragen
292
14 Collections
294
14.1 Einführung
294
Koordinatenpunkte eines Polygons speichern (»List«)
295
Lottozahlen generieren (»Set«)
295
Wörterbuch speichern (»Map«)
296
Klassenüberblick
296
Regeln, Tipps und Tricks
298
14.2 Die »Iterable«-Schnittstelle
300
Die »forEach«-Methode
301
14.3 Die »Collection«-Schnittstelle
302
Die »removeIf«- und »stream«-Methoden
304
14.4 Die »Set«-Schnittstelle
305
Die »HashSet«-Klasse
305
Die »LinkedHashSet«-Klasse
307
Die »TreeSet«-Klasse
308
14.5 Die »List«-Schnittstelle
310
Die »replaceAll«-Methode
311
Die »ArrayList«-Klasse
312
Die »LinkedList«-Klasse
313
14.6 Die »Stream«-Schnittstelle
313
Stream-Beispiele
315
14.7 Die »Map«-Schnittstelle
318
Die »HashMap«- und »LinkedHashMap«-Klassen
319
Schleifen über Maps
320
14.8 Wiederholungsfragen und Übungen
322
15 Dateien und Verzeichnisse
323
15.1 Klassen- und Schnittstellenüberblick
323
Fehlerabsicherung
324
Ressourcen schließen
325
15.2 Dateien und Verzeichnisse ergründen
325
Besondere Verzeichnisse
325
Die »Path«-Schnittstelle
326
Testen, ob ein Verzeichnis bzw. eine Datei existiert
328
Eigenschaften einer Datei ermitteln
329
Liste der Dateien in einem Verzeichnis ermitteln
331
15.3 Dateien und Verzeichnisse bearbeiten
333
Beispiel
334
15.4 Textdateien lesen und schreiben
336
Textdateien schreiben
336
Textdateien auslesen
338
Andere Zeichensätze als UTF-8 verwenden
339
15.5 Wiederholungsaufgaben und Übungen
340
16 JavaFX
341
16.1 Einführung
342
Eclipse JavaFX-tauglich machen
342
Hello JavaFX!
342
Ein erster Blick hinter die Kulissen
344
Der Scene Graph
345
16.2 Arbeiten mit Steuerelementen
346
Der Scene Graph des Beispielprogramms
347
Steuerelemente und Container erzeugen
349
Ereignisse
352
16.3 Grafikprogrammierung
354
Einführungsbeispiel
354
Den Zufall zeichnen lassen
356
Lissajous-Figuren zeichnen
358
16.4 Mehr JavaFX
360
16.5 Wiederholungsaufgaben und Übungen
362
17 Javadoc
363
17.1 Javadoc-Syntax
363
Beispiel
364
17.2 Das Javadoc-Kommando
366
17.3 Übung
368
18 Pakete und Bibliotheken
369
18.1 import
369
Die »import«-Syntax
370
Standard-Import für »java.lang«
371
Statische Importe
371
18.2 Pakete
372
18.3 Bibliotheken
374
Fertige Java-Bibliotheken nutzen
374
Eigene Java-Bibliotheken erzeugen
376
A Eclipse-Crashkurs
377
A.1 Erste Schritte
377
Workspace
377
Der Welcome-Dialog
378
Grundeinstellungen
378
Views
381
Mit Views arbeiten
382
Perspektiven
383
A.2 Arbeitstechniken
384
Projekte starten
384
Code eingeben
384
Code korrigieren
386
Variablen umbenennen (Refactoring)
386
Code automatisch generieren
387
Projekte umbenennen und kopieren
387
Projekte exportieren und importieren (ZIP-Archive)
388
Externe Bibliotheken (jar-Dateien) integrieren
388
A.3 Debugging
389
Debugging-Funktionen
390
B Lösungen
392
B.1 Kapitel 1, »Hello World!«
392
B.2 Kapitel 2, »Variablenverwaltung«
395
B.3 Kapitel 3, »Operatoren«
397
B.4 Kapitel 4, »Verzweigungen und Schleifen«
398
B.5 Kapitel 5, »Arrays«
400
B.6 Kapitel 6, »Zeichenketten«
401
B.7 Kapitel 7, »Datum und Uhrzeit«
402
B.8 Kapitel 8, »Methoden«
403
B.9 Kapitel 9, »Exceptions«
404
B.10 Kapitel 10, »Klassen«
405
B.11 Kapitel 11, »Vererbung und Schnittstellen«
407
B.12 Kapitel 12, »Generische Klassen und Methoden«
409
B.13 Kapitel 13, »Lambda-Ausdrücke«
409
B.14 Kapitel 14, »Collections«
410
B.15 Kapitel 15, »Dateien und Verzeichnisse«
412
B.16 Kapitel 16, »JavaFX«
413
B.17 Kapitel 17, »Javadoc«
415
Index
416