Einfach Java - Gleich richtig programmieren lernen
von: Michael Inden
dpunkt, 2021
ISBN: 9783969105436
Sprache: Deutsch
424 Seiten, Download: 18660 KB
Format: PDF, auch als Online-Lesen
Vorwort | 7 | ||
I Einstieg | 23 | ||
1 Einführung | 25 | ||
1.1 Java im Überblick | 25 | ||
1.2 Los geht's – Installation | 27 | ||
1.2.1 Java-Download | 27 | ||
1.2.2 Installation des JDKs | 29 | ||
1.2.3 Nacharbeiten nach der Java-Installation | 29 | ||
1.2.4 Java-Installation prüfen | 30 | ||
1.3 Entwicklungsumgebungen | 31 | ||
1.3.1 Installation von Eclipse | 32 | ||
1.3.2 Eclipse starten | 34 | ||
1.3.3 Erstes Projekt in Eclipse | 36 | ||
1.3.4 Erste Klasse in Eclipse | 38 | ||
2 Schnelleinstieg | 41 | ||
2.1 Hallo Welt (Hello World) | 41 | ||
2.2 Variablen und Datentypen | 42 | ||
2.2.1 Definition von Variablen | 42 | ||
2.2.2 Bezeichner (Variablennamen) | 45 | ||
2.3 Operatoren im Überblick | 47 | ||
2.3.1 Arithmetische Operatoren | 47 | ||
2.3.2 Zuweisungsoperatoren | 50 | ||
2.3.3 Vergleichsoperatoren | 52 | ||
2.3.4 Logische Operatoren | 53 | ||
2.4 Fallunterscheidungen | 54 | ||
2.5 Methoden | 58 | ||
2.5.1 Methoden aus dem JDK nutzen | 58 | ||
2.5.2 Eigene Methoden definieren | 59 | ||
2.5.3 Nützliche Beispiele aus dem JDK | 62 | ||
2.5.4 Signatur einer Methode | 65 | ||
2.5.5 Fehlerbehandlung und Exceptions | 66 | ||
2.6 Kommentare | 66 | ||
2.7 Schleifen | 67 | ||
2.7.1 Die for-Schleife | 67 | ||
2.7.2 Die for-each-Schleife | 68 | ||
2.7.3 Die while-Schleife | 69 | ||
2.7.4 Die do-while-Schleife | 70 | ||
2.8 Rekapitulation | 71 | ||
2.9 Weiterführende Dokumentation für nächste Schritte | 72 | ||
2.10 Aufgaben und Lösungen | 73 | ||
2.10.1 Aufgabe 1: Mathematische Berechnungen | 73 | ||
2.10.2 Aufgabe 2: Methode und if | 73 | ||
2.10.3 Aufgabe 3: Selbstabholerrabatt | 74 | ||
2.10.4 Aufgabe 4: Schleifen mit Berechnungen | 75 | ||
2.10.5 Aufgabe 5: Schleifen und fixe Schrittweite | 76 | ||
2.10.6 Aufgabe 6: Schleifen mit variabler Schrittweite | 76 | ||
2.10.7 Aufgabe 7: Verschachtelte Schleifen – Variante 1 | 77 | ||
2.10.8 Aufgabe 8: Verschachtelte Schleifen – Variante 2 | 78 | ||
2.10.9 Aufgabe 9: Verschachtelte Schleifen – Variante 3 | 79 | ||
3 Strings | 81 | ||
3.1 Schnelleinstieg | 81 | ||
3.1.1 Gebräuchliche Stringaktionen | 81 | ||
3.1.2 Suchen und Ersetzen | 85 | ||
3.1.3 Informationen extrahieren und formatieren | 87 | ||
3.2 Nächste Schritte | 89 | ||
3.2.1 Die Klasse Scanner | 90 | ||
3.2.2 Mehrzeilige Strings (Text Blocks) | 93 | ||
3.2.3 Strings und char[]s | 94 | ||
3.3 Praxisbeispiel: Text in Title Case wandeln | 96 | ||
3.4 Aufgaben und Lösungen | 98 | ||
3.4.1 Aufgabe 1: Länge, Zeichen und Enthaltensein | 98 | ||
3.4.2 Aufgabe 2: Title Case mit Scanner | 98 | ||
3.4.3 Aufgabe 3: Zeichen wiederholen | 99 | ||
3.4.4 Aufgabe 4: Vokale raten | 100 | ||
3.4.5 Aufgabe 5: String Merge | 102 | ||
4 Arrays | 105 | ||
4.1 Schnelleinstieg | 105 | ||
4.1.1 Gebräuchliche Aktionen | 105 | ||
4.1.2 Mehrdimensionale Arrays | 111 | ||
4.2 Nächste Schritte | 112 | ||
4.2.1 Eindimensionale Arrays | 113 | ||
4.2.2 Mehrdimensionale Arrays | 117 | ||
4.3 Praxisbeispiel: Flächen füllen | 121 | ||
4.4 Aufgaben und Lösungen | 124 | ||
4.4.1 Aufgabe 1: Durcheinanderwürfeln eines Arrays | 124 | ||
4.4.2 Aufgabe 2: Arrays kombinieren | 125 | ||
4.4.3 Aufgabe 3: Rotation um eine oder mehrere Positionen | 126 | ||
4.4.4 Aufgabe 4: Zweidimensionales String-Array ausgeben | 128 | ||
4.4.5 Aufgabe 5: Dreieckiges Array: Upside Down | 129 | ||
5 Klassen und Objektorientierung | 131 | ||
5.1 Schnelleinstieg | 131 | ||
5.1.1 Grundlagen zu Klassen und Objekten | 132 | ||
5.1.2 Eigenschaften (Attribute) | 134 | ||
5.1.3 Verhalten (Methoden) | 139 | ||
5.1.4 Objekte vergleichen – die Rolle von equals() | 142 | ||
5.2 Nächste Schritte | 145 | ||
5.2.1 Klassen ausführbar machen | 145 | ||
5.2.2 Imports und Packages | 148 | ||
5.2.3 Übergang zum Einsatz einer IDE | 150 | ||
5.2.4 Imports und Packages: Auswirkungen auf unsere Applikation | 154 | ||
5.2.5 Verstecken von Informationen | 160 | ||
5.3 Vererbung | 164 | ||
5.3.1 Basisklassen und abstrakte Basisklassen | 165 | ||
5.3.2 Overloading und Overriding | 167 | ||
5.4 Die Klasse Object | 169 | ||
5.4.1 Beispielklasse Person | 170 | ||
5.4.2 Die Methode toString() | 171 | ||
5.4.3 Ergänzungen zur Methode equals(Object) | 172 | ||
5.4.4 Typprüfung mit instanceof | 172 | ||
5.4.5 Pattern Matching bei instanceof | 173 | ||
5.5 Schnittstelle (Interface) und Implementierung | 174 | ||
5.6 Records | 176 | ||
5.7 Aufgaben und Lösungen | 178 | ||
5.7.1 Aufgabe 1: Obstkorb | 178 | ||
5.7.2 Aufgabe 2: Superheld | 179 | ||
5.7.3 Aufgabe 3: Zähler | 181 | ||
5.7.4 Aufgabe 4: Zähler mit Überlauf | 183 | ||
6 Collections | 187 | ||
6.1 Schnelleinstieg | 187 | ||
6.1.1 Die Klasse ArrayList | 187 | ||
6.1.2 Die Klasse HashSet | 193 | ||
6.1.3 Iteratoren | 197 | ||
6.1.4 Die Klasse HashMap | 199 | ||
6.2 Nächste Schritte | 203 | ||
6.2.1 Generische Typen (Generics) | 203 | ||
6.2.2 Basisinterfaces für die Containerklassen | 208 | ||
6.3 Praxisbeispiel: Einen Stack selbst realisieren | 212 | ||
6.4 Aufgaben und Lösungen | 214 | ||
6.4.1 Aufgabe 1: Tennisverein-Mitgliederliste | 214 | ||
6.4.2 Aufgabe 2: Liste mit Farbnamen füllen und filtern | 215 | ||
6.4.3 Aufgabe 3: Duplikate entfernen – Variante 1 | 215 | ||
6.4.4 Aufgabe 4: Duplikate entfernen – Variante 2 | 216 | ||
6.4.5 Aufgabe 5: Hauptstädte | 217 | ||
6.4.6 Aufgabe 6: Häufigkeiten von Namen | 217 | ||
6.4.7 Aufgabe 7: Objekte mit Maps selbst gebaut | 218 | ||
6.4.8 Aufgabe 8: Listenreihenfolge umdrehen (mit Stack) | 219 | ||
7 Ergänzendes Wissen | 221 | ||
7.1 Sichtbarkeits- und Gültigkeitsbereiche | 221 | ||
7.2 Primitive Typen und Wrapper-Klassen | 223 | ||
7.2.1 Grundlagen | 223 | ||
7.2.2 Casting: Typerweiterungen sowie -verkleinerungen | 228 | ||
7.2.3 Konvertierung von Werten | 229 | ||
7.3 Ternary-Operator (?-Operator) | 232 | ||
7.4 Aufzählungen mit enum | 233 | ||
7.5 Switch | 235 | ||
7.6 Moderne Switch Expressions | 237 | ||
7.6.1 Einführendes Beispiel | 237 | ||
7.6.2 Weitere Gründe für die Neuerung | 239 | ||
7.7 Pattern Matching bei Switch Expressions (Java 17 Preview) | 241 | ||
7.7.1 Einführendes Beispiel | 241 | ||
7.7.2 Spezialitäten | 242 | ||
7.8 Break und Continue in Schleifen | 244 | ||
7.8.1 Funktionsweise von break und continue in Schleifen | 244 | ||
7.8.2 Wie macht man es besser? | 246 | ||
7.9 Rekursion | 248 | ||
7.10 Aufgaben und Lösungen | 251 | ||
7.10.1 Aufgabe 1: Würfelspiel | 251 | ||
7.10.2 Aufgabe 2: Prüfung auf Vokale mit switch | 252 | ||
7.10.3 Aufgabe 3: Temperaturumrechnung | 252 | ||
7.10.4 Aufgabe 4: Palindrom-Prüfung mit Rekursion | 254 | ||
II Aufstieg | 257 | ||
8 Mehr zu Klassen und Objektorientierung | 259 | ||
8.1 Wissenswertes zu Vererbung | 259 | ||
8.1.1 Generalisierung und Spezialisierung | 259 | ||
8.1.2 Polymorphie | 261 | ||
8.1.3 Sub-Classing und Sub-Typing | 262 | ||
8.2 Varianten innerer Klassen | 263 | ||
8.2.1 »Normale« innere Klassen | 263 | ||
8.2.2 Statische innere Klassen | 264 | ||
8.2.3 Methodenlokale innere Klassen | 265 | ||
8.2.4 Anonyme innere Klassen | 265 | ||
9 Lambdas und Streams | 267 | ||
9.1 Einstieg in Lambdas | 267 | ||
9.1.1 Syntax von Lambdas | 267 | ||
9.1.2 Functional Interfaces und SAM-Typen | 268 | ||
9.2 Methodenreferenzen | 271 | ||
9.3 Externe vs. interne Iteration | 272 | ||
9.3.1 Externe Iteration | 273 | ||
9.3.2 Interne Iteration | 273 | ||
9.3.3 Das Interface Predicate |
274 | ||
9.4 Streams im Überblick | 275 | ||
9.4.1 Streams erzeugen – Create Operations | 276 | ||
9.4.2 Intermediate und Terminal Operations im Überblick | 277 | ||
9.4.3 Zustandslose Intermediate Operations | 277 | ||
9.4.4 Zustandsbehaftete Intermediate Operations | 282 | ||
9.4.5 Terminal Operations | 283 | ||
9.5 Aufgaben und Lösungen | 286 | ||
9.5.1 Aufgabe 1: Erwachsene aus Personenliste extrahieren | 286 | ||
9.5.2 Aufgabe 2: Stream-API | 287 | ||
9.5.3 Aufgabe 3: Informationen mit Stream-API extrahieren | 288 | ||
9.5.4 Aufgabe 4: Häufigkeiten von Namen | 289 | ||
9.5.5 Aufgabe 5: Kollektoren | 289 | ||
10 Verarbeitung von Dateien | 291 | ||
10.1 Schnelleinstieg | 291 | ||
10.1.1 Das Interface Path und die Utility-Klasse Files | 292 | ||
10.1.2 Anlegen von Dateien und Verzeichnissen | 292 | ||
10.1.3 Inhalt eines Verzeichnisses auflisten | 293 | ||
10.1.4 Pfad ist Datei oder Verzeichnis? | 294 | ||
10.1.5 Dateiaktionen und die Utility-Klasse Files | 294 | ||
10.1.6 Informationen zu Path-Objekten ermitteln | 298 | ||
10.1.7 Kopieren | 299 | ||
10.1.8 Umbenennen | 301 | ||
10.1.9 Löschen | 302 | ||
10.2 Dateibehandlung und die Klasse File | 303 | ||
10.2.1 Konvertierung von Path in File und zurück | 304 | ||
10.2.2 Die Klasse File im Kurzüberblick | 304 | ||
10.2.3 Dateiinhalte verarbeiten und Systemressourcen | 305 | ||
10.3 Praxisbeispiel: Directory-Baum darstellen | 307 | ||
10.3.1 Basisvariante | 308 | ||
10.3.2 Variante mit schönerer Darstellung | 310 | ||
10.3.3 Finale Variante mit ausgeklügelter Darstellung | 311 | ||
10.4 Aufgaben und Lösungen | 313 | ||
10.4.1 Aufgabe 1: Texte in Datei schreiben und wieder lesen | 313 | ||
10.4.2 Aufgabe 2: Dateigrößen | 313 | ||
10.4.3 Aufgabe 3: Existenzprüfung | 314 | ||
10.4.4 Aufgabe 4: Rechteprüfung | 314 | ||
10.4.5 Aufgabe 5: Verzeichnisinhalt auflisten | 315 | ||
11 Fehlerbehandlung mit Exceptions | 317 | ||
11.1 Schnelleinstieg | 317 | ||
11.1.1 Fehlerbehandlung | 318 | ||
11.1.2 Exceptions selbst auslösen – throw | 323 | ||
11.1.3 Eigene Exception-Typen definieren | 324 | ||
11.1.4 Exceptions propagieren – throws | 324 | ||
11.2 Fehlerbehandlung in der Praxis | 325 | ||
11.3 Automatic Resource Management (ARM) | 327 | ||
11.4 Hintergrundwissen: Checked und Unchecked Exceptions | 328 | ||
12 Datumsverarbeitung | 331 | ||
12.1 Schnelleinstieg | 331 | ||
12.1.1 Die Aufzählungen DayOfWeek und Month | 331 | ||
12.1.2 Die Klasse LocalDate | 333 | ||
12.1.3 Die Klassen LocalTime und LocalDateTime | 337 | ||
12.2 Nächste Schritte | 339 | ||
12.2.1 Datumsarithmetik | 339 | ||
12.2.2 Formatierung und Parsing | 341 | ||
12.3 Praxisbeispiel: Kalenderausgabe | 343 | ||
12.4 Aufgaben und Lösungen | 346 | ||
12.4.1 Aufgabe 1: Wochentage | 346 | ||
12.4.2 Aufgabe 2: Freitag, der 13. | 347 | ||
12.4.3 Aufgabe 3: Mehrmals Freitag, der 13. | 348 | ||
12.4.4 Aufgabe 4: Schaltjahre | 349 | ||
III Praxisbeispiele | 351 | ||
13 Praxisbeispiel: Tic Tac Toe | 353 | ||
13.1 Spielfeld initialisieren und darstellen | 353 | ||
13.2 Setzen der Steine | 354 | ||
13.3 Prüfen auf Sieg | 355 | ||
13.4 Bausteine im Einsatz | 357 | ||
14 Praxisbeispiel: CSV-Highscore-Liste einlesen | 359 | ||
14.1 Verarbeitung von Spielständen (Highscores) | 359 | ||
14.2 Extraktion der Daten | 361 | ||
14.3 Besonderheiten der Implementierung | 362 | ||
15 Praxisbeispiel: Worträtsel | 363 | ||
15.1 Applikationsdesign – Vorüberlegungen zur Strukturierung | 364 | ||
15.2 Einlesen der verfügbaren Wörter | 364 | ||
15.3 Hilfsdatenstrukturen | 366 | ||
15.4 Datenmodell | 366 | ||
15.4.1 Datenspeicherung und Initialisierung | 366 | ||
15.4.2 Zufällige Wahl von Richtung, Position, Wort und Buchstabe | 368 | ||
15.4.3 Algorithmus zum Verstecken von Wörtern | 368 | ||
15.4.4 Wort prüfen und platzieren | 370 | ||
15.5 HTML-Erzeugung | 372 | ||
15.6 Hauptapplikation | 373 | ||
15.7 Ausgabe als HTML und Darstellung im Browser | 375 | ||
15.8 Fazit | 376 | ||
IV Schlussgedanken | 377 | ||
16 Gute Angewohnheiten | 379 | ||
16.1 Grundregeln eines guten Programmierstils | 379 | ||
16.2 Coding Conventions | 380 | ||
16.2.1 Grundlegende Namens- und Formatierungsregeln | 380 | ||
16.2.2 Namensgebung | 382 | ||
16.2.3 Dokumentation | 385 | ||
16.2.4 Programmdesign | 385 | ||
16.2.5 Parameterlisten | 386 | ||
16.2.6 Logik und Kontrollfluss | 387 | ||
16.3 Sourcecode-Prüfung | 388 | ||
16.4 JUnit 5: Auch ans Testen denken | 390 | ||
16.4.1 Das JUnit-Framework | 390 | ||
16.4.2 Schreiben und Ausführen von Tests | 392 | ||
17 Schlusswort | 395 | ||
V Anhang | 397 | ||
A Schlüsselwörter im Überblick | 399 | ||
B Schnelleinstieg JShell | 403 | ||
C Grundlagen zur JVM und Infos zum Java-Ökosystem | 407 | ||
C.1 Wissenswertes zur Java Virtual Machine (JVM) | 407 | ||
C.1.1 Einführendes Beispiel | 408 | ||
C.1.2 Ausführung eines Java-Programms | 409 | ||
C.2 Das Java-Ökosystem im Kurzüberblick | 410 | ||
Literaturverzeichnis | 413 | ||
Index | 415 |
Kategorien
Kategorien
Service
Info/Kontakt