E-Book, Deutsch, 1234 Seiten
Reihe: Rheinwerk Computing
Ullenboom Java ist auch eine Insel
18. Auflage 2025
ISBN: 978-3-367-11312-5
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Einführung, Ausbildung, Praxis
E-Book, Deutsch, 1234 Seiten
Reihe: Rheinwerk Computing
ISBN: 978-3-367-11312-5
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
- Programmieren mit der Java Platform, Standard Edition 25
- Java von A bis Z: Einführung, Praxis, Referenz
- Von Ausdrücken und Anweisungen zu Klassen und Objekten
Java-Bücher gibt es wie Sand am Meer, aber die Java-Insel ist das Kultbuch für Programmierer und erste Wahl, wenn es um aktuelles und praktisches Java-Wissen geht. Seit über einem Jahrzehnt profitieren Java-Einsteiger, Studierende und Umsteiger von anderen Programmiersprachen gleichermaßen von diesem Standardwerk unter den Java-Büchern . Dozenten und Ausbilder schätzen das Buch für die zahlreichen Beispiele, Aufgaben und Musterlösungen. Leserinnen und Leser feiern es für die verständliche Darstellungsweise und den feinen Humor; Programmierung darf auch Spaß machen!
Aus dem Inhalt:
- Imperative Sprachkonzepte
- Klassen und Objekte
- Ausnahmebehandlung
- Generics
- Lambda-Ausdrücke und funktionale Programmierung
- Die Klassenbibliothek
- Nebenläufige Programmierung
- Einführung in Datenstrukturen, GUI-Entwicklung, Dateien usw.
Autoren/Hrsg.
Weitere Infos & Material
Materialien zum Buch ... 32
Vorwort ... 33
1. Java ist auch eine Sprache ... 49
1.1 ... Historischer Hintergrund ... 50
1.2 ... Warum Java populär ist -- die zentralen Eigenschaften ... 52
1.3 ... Java im Vergleich zu anderen Sprachen * ... 63
1.4 ... Einschränkungen von Java ... 65
1.5 ... Weiterentwicklung und Umbrüche ... 67
1.6 ... Java-Plattformvarianten ... 70
1.7 ... Java SE-Implementierungen ... 75
1.8 ... Installation des JDK und erster Start ... 78
1.9 ... Entwicklungsumgebungen ... 84
1.10 ... Zum Weiterlesen ... 90
2. Imperative Sprachkonzepte ... 91
2.1 ... Von der Klasse zur Anweisung ... 91
2.2 ... Lexikalische Grundlagen ... 109
2.3 ... Datentypen, Typisierung, Variablen und Zuweisungen ... 113
2.4 ... Ausdrücke, Operanden und Operatoren ... 132
2.5 ... Bedingte Anweisungen oder Fallunterscheidungen ... 156
2.6 ... Immer das Gleiche mit den Schleifen ... 175
2.7 ... Methoden deklarieren ... 193
2.8 ... Methoden brauchen ein Zuhause: Instanz oder Klasse ... 214
2.9 ... Zum Weiterlesen ... 220
3. Klassen und Objekte ... 221
3.1 ... Objektorientierte Programmierung (OOP) ... 221
3.2 ... Eigenschaften einer Klasse ... 223
3.3 ... Natürlich modellieren mit der UML (Unified Modeling Language) * ... 225
3.4 ... Neue Objekte erzeugen ... 227
3.5 ... ZZZZZnake ... 237
3.6 ... Pakete schnüren, Importe und Compilationseinheiten ... 239
3.7 ... Mit Referenzen arbeiten, Vielfalt, Identität, Gleichwertigkeit ... 250
3.8 ... Der Zusammenhang von new, Heap und Garbage-Collector ... 262
3.9 ... Zum Weiterlesen ... 264
4. Arrays und ihre Anwendungen ... 265
4.1 ... Einfache Feldarbeit ... 265
4.2 ... Die erweiterte for-Schleife ... 277
4.3 ... Methode mit variabler Argumentanzahl (Varargs) ... 281
4.4 ... Mehrdimensionale Arrays * ... 284
4.5 ... Bibliotheksunterstützung von Arrays ... 290
4.6 ... Die Klasse Arrays zum Vergleichen, Füllen, Suchen und Sortieren nutzen ... 292
4.7 ... Der Startpunkt für das Laufzeitsystem: main(...) ... 307
4.8 ... Zum Weiterlesen ... 310
5. Der Umgang mit Zeichen und Zeichenketten ... 311
5.1 ... Von ASCII über ISO-8859-1 zu Unicode ... 311
5.2 ... Datentypen für Zeichen und Zeichenketten ... 319
5.3 ... Die Character-Klasse ... 320
5.4 ... Datentypen für Zeichenketten ... 325
5.5 ... Die Klasse String und ihre Methoden ... 327
5.6 ... Veränderbare Zeichenketten mit StringBuilder ... 359
5.7 ... CharSequence als Basistyp ... 368
5.8 ... Konvertieren zwischen Primitiven und Strings ... 371
5.9 ... Strings verketten (konkatenieren) ... 379
5.10 ... Zerlegen von Zeichenketten ... 381
5.11 ... Ausgaben formatieren ... 386
5.12 ... Zum Weiterlesen ... 393
6. Eigene Klassen schreiben ... 395
6.1 ... Eigene Klassen mit Eigenschaften deklarieren ... 395
6.2 ... Privatsphäre und Sichtbarkeit ... 407
6.3 ... Eine für alle -- statische Methoden und Klassenvariablen ... 418
6.4 ... Konstanten und Aufzählungen ... 426
6.5 ... Objekte anlegen und zerstören ... 435
6.6 ... Klassen- und Objektinitialisierung * ... 449
6.7 ... Zum Weiterlesen ... 458
7. Objektorientierte Beziehungsfragen ... 459
7.1 ... Assoziationen zwischen Objekten ... 459
7.2 ... Vererbung ... 470
7.3 ... Typen in Hierarchien ... 481
7.4 ... Methoden überschreiben ... 494
7.5 ... Drum prüfe, wer sich dynamisch bindet ... 501
7.6 ... Finale Klassen und finale Methoden ... 504
7.7 ... Abstrakte Klassen und abstrakte Methoden ... 506
7.8 ... Weiteres zum Überschreiben und dynamischen Binden ... 514
7.9 ... Zum Weiterlesen und Programmieraufgabe ... 520
8. Records, Schnittstellen, Aufzählungen, versiegelte Klassen ... 523
8.1 ... Records ... 523
8.2 ... Schnittstellen ... 535
8.3 ... Aufzählungstypen ... 576
8.4 ... Versiegelte Klassen und Schnittstellen ... 587
8.5 ... Zum Weiterlesen ... 595
9. Ausnahmen müssen sein ... 597
9.1 ... Problembereiche einzäunen ... 598
9.2 ... Ausnahmen mit throws nach oben reichen ... 607
9.3 ... Die Klassenhierarchie der Ausnahmen ... 608
9.4 ... Abschlussbehandlung mit finally ... 618
9.5 ... Auslösen eigener Exceptions ... 623
9.6 ... try mit Ressourcen (automatisches Ressourcenmanagement) ... 640
9.7 ... Besonderheiten bei der Ausnahmebehandlung * ... 650
9.8 ... Harte Fehler -- Error * ... 655
9.9 ... Zusicherungen im Programmcode (Assertions) * ... 656
9.10 ... Zum Weiterlesen ... 659
10. Geschachtelte Typen ... 661
10.1 ... Geschachtelte Klassen, Records, Schnittstellen und Aufzählungen ... 661
10.2 ... Statische geschachtelte Typen ... 663
10.3 ... Nichtstatische geschachtelte Typen ... 665
10.4 ... Lokale Klassen ... 668
10.5 ... Anonyme innere Klassen ... 670
10.6 ... Vermischtes ... 675
10.7 ... Zum Weiterlesen ... 679
11. Besondere Typen der Java SE ... 681
11.1 ... Object ist die Mutter aller Klassen ... 682
11.2 ... Schwache Referenzen und Cleaner ... 704
11.3 ... Die Utility-Klasse java.util.Objects ... 705
11.4 ... Vergleichen von Objekten und Ordnung herstellen ... 709
11.5 ... Wrapper-Klassen und Autoboxing ... 718
11.6 ... Iterator, Iterable * ... 737
11.7 ... Annotationen in der Java SE ... 745
11.8 ... Zum Weiterlesen ... 750
12. Generics
12.1 ... Einführung in Java Generics ... 751
12.2 ... Umsetzen der Generics, Typlöschung und Raw-Types ... 768
12.3 ... Die Typen über Bounds einschränken ... 776
12.4 ... Typparameter in der throws-Klausel * ... 780
12.5 ... Generics und Vererbung, Invarianz ... 784
12.6 ... Konsequenzen der Typlöschung: Typ-Token, Arrays und Brücken * ... 796
12.7 ... Zum Weiterlesen ... 806
13. Lambda-Ausdrücke und funktionale Programmierung ... 807
13.1 ... Funktionale Schnittstellen und Lambda-Ausdrücke ... 807
13.2 ... Methodenreferenz ... 831
13.3 ... Konstruktorreferenz ... 836
13.4 ... Funktionale Programmierung ... 839
13.5 ... Funktionale Schnittstellen aus dem java.util.function-Paket ... 848
13.6 ... Optional ist keine Nullnummer ... 863
13.7 ... Was ist jetzt so funktional? ... 874
13.8 ... Zum Weiterlesen ... 876
14. Architektur, Design und angewandte Objektorientierung ... 877
14.1 ... SOLIDe Modellierung ... 877
14.2 ... Architektur, Design und Implementierung ... 881
14.3 ... Design-Patterns (Entwurfsmuster) ... 882
14.4 ... Zum Weiterlesen ... 890
15. Java Platform Module System ... 891
15.1 ... Klassenlader (Class Loader) und Modul-/Klassenpfad ... 891
15.2 ... Module im JPMS einbinden ... 897
15.3 ... Eigene Module entwickeln ... 902
15.4 ... Zum Weiterlesen ... 911
16. Die Klassenbibliothek ... 913
16.1 ... Die Java-Klassenphilosophie ... 913
16.2 ... Einfache Zeitmessung und Profiling * ... 917
16.3 ... Die Klasse Class ... 918
16.4 ... Die Utility-Klassen System und Properties ... 921
16.5 ... Sprachen der Länder ... 929
16.6 ... Wichtige Datum-Klassen im Überblick ... 933
16.7 ... Date-Time-API ... 935
16.8 ... Logging mit Java ... 940
16.9 ... Maven: Build-Management und Abhängigkeiten auflösen ... 943
16.10 ... Zum Weiterlesen ... 945
17. Einführung in die nebenläufige Programmierung ... 947
17.1 ... Nebenläufigkeit und Parallelität ... 947
17.2 ... Existierende Threads und neue Threads erzeugen ... 951
17.3 ... Der Ausführer (Executor) kommt ins Spiel ... 965
17.4 ... Zum Weiterlesen ... 981
18. Einführung in Datenstrukturen und Algorithmen ... 983
18.1 ... Listen ... 983
18.2 ... Mengen (Sets) ... 998
18.3 ... Assoziative Speicher ... 1009
18.4 ... Ausgewählte Basistypen ... 1015
18.5 ... Java-Stream-API ... 1016
18.6 ... Einen Stream erzeugen ... 1019
18.7 ... Terminale Operationen ... 1022
18.8 ... Intermediäre Operationen ... 1029
18.9 ... Zum Weiterlesen ... 1036
19. Einführung in grafische Oberflächen ... 1039
19.1 ... GUI-Frameworks ... 1039
19.2 ... Abstract Window Toolkit (AWT) ... 1040
19.3 ... Java Foundation Classes und Swing ... 1043
19.4 ... JavaFX ... 1045
19.5 ... Standard Widget Toolkit (SWT) * ... 1047
19.6 ... Zum Weiterlesen ... 1048
20. Einführung in Dateien und Datenströme ... 1049
20.1 ... Alte und neue Welt in java.io und java.nio ... 1049
20.2 ... Dateisysteme und Pfade ... 1050
20.3 ... Dateien mit wahlfreiem Zugriff ... 1060
20.4 ... Basisklassen für die Ein-/Ausgabe ... 1065
20.5 ... Lesen aus Dateien und Schreiben in Dateien ... 1077
20.6 ... Zum Weiterlesen ... 1085
21. Einführung ins Datenbankmanagement mit JDBC ... 1087
21.1 ... Relationale Datenbanken und Java-Zugriffe ... 1087
21.2 ... Eine Beispielabfrage ... 1090
21.3 ... Zum Weiterlesen ... 1091
22. Bits und Bytes, Mathematisches und Geld ... 1093
22.1 ... Bits und Bytes ... 1093
22.2 ... Gleitkomma-Arithmetik in Java ... 1108
22.3 ... Die Eigenschaften der Klasse Math ... 1114
22.4 ... Genauigkeit, Wertebereich eines Typs und Überlaufkontrolle * ... 1126
22.5 ... Zufallszahlen: Random, ThreadLocalRandom und SecureRandom ... 1131
22.6 ... Große Zahlen * ... 1135
22.7 ... Geld und Währung ... 1149
22.8 ... Zum Weiterlesen ... 1151
23. Testen mit JUnit ... 1153
23.1 ... Softwaretests ... 1153
23.2 ... Das Test-Framework JUnit ... 1154
23.3 ... Java-Assertions-Bibliotheken und AssertJ ... 1167
23.4 ... Aufbau größerer Testfälle ... 1169
23.5 ... Wie gutes Design das Testen ermöglicht ... 1171
23.6 ... Dummy, Fake, Stub und Mock ... 1173
23.7 ... JUnit-Erweiterungen, Testzusätze ... 1176
23.8 ... Zum Weiterlesen ... 1177
24. Die Werkzeuge des JDK ... 1179
24.1 ... Übersicht ... 1179
24.2 ... Java-Quellen übersetzen ... 1180
24.3 ... Die Java-Laufzeitumgebung ... 1182
24.4 ... Dokumentationskommentare mit Javadoc ... 1184
24.5 ... Das Archivformat JAR ... 1194
24.6 ... Zum Weiterlesen ... 1197
Anhang ... 1199
A ... Java SE-Module und Paketübersicht ... 1199
B ... Referenz Schlüsselwörter ... 1217
Index ... 1223
Vorwort
»Mancher glaubt, schon darum höflich zu sein, weil er sich überhaupt noch der Worte und nicht der Fäuste bedient.«
– Friedrich Hebbel (1813–1863)
Am Anfang war das Wort. Viel später, am 23. Mai 1995, stellten auf der SunWorld in San Francisco der Chef des damaligen Science Office von Sun Microsystems, John Gage, und Netscape-Mitbegründer Marc Andreessen die neue Programmiersprache Java und deren Integration in den Webbrowser Netscape vor. Damit begann der Siegeszug einer Sprache, die uns elegante Wege eröffnet, plattformunabhängig zu programmieren und objektorientiert unsere Gedanken auszudrücken. Die Möglichkeiten der Sprache und Bibliotheken sind an sich nichts Neues, aber so gut verpackt, dass Java angenehm und flüssig zu programmieren ist und Java heute zu den populärsten Programmiersprachen auf unserem Planeten zählt. Dieses Buch beschäftigt sich in 24 Kapiteln mit der Java-Technologie und intensiv mit der Programmiersprache Java. Wichtige Themen sind objektorientierte Programmierung, das Design von Klassen und der Aufbau der Java-Standardbibliotheken.
Die Zielgruppe des Buchs
Die Kapitel dieses Buches sind für Einsteigende in die Programmiersprache Java wie auch für Fortgeschrittene konzipiert. Grundlegende Kenntnisse in einer strukturierten Programmiersprache wie C, Python oder JavaScript und Wissen über objektorientierte Programmierung sind hilfreich, weil das Buch nicht explizit auf eine Rechnerarchitektur oder die grundlegende Frage eingeht, was Programmieren eigentlich ist. Wer bereits in einer beliebigen Sprache programmiert hat, findet mit diesem Buch den passenden Einstieg in Java.
Was dieses Buch nicht ist
Dieses Buch darf nicht als Programmierbuch für Anfänger verstanden werden. Wer noch nie programmiert hat und mit dem Wort »Übersetzen« in erster Linie »Dolmetschen« verbindet, der sollte besser ein anderes Tutorial bevorzugen oder parallel lesen. Die »Insel« behandelt viele Bereiche aus dem Leben eines Industrieprogrammierers oder einer Industrieprogrammiererin bis zu einer allgemein verständlichen Tiefe, doch sie ersetzt nicht die Java Language Specification (JLS, https://docs.oracle.com/javase/specs).
Die Java-Technologien sind in den letzten Jahren explodiert, sodass die anfängliche Überschaubarkeit einer starken Spezialisierung gewichen ist. Heute ist es kaum mehr möglich, alles in einem Buch zu behandeln, und das möchte ich mit der »Insel« auch auf keinen Fall. Ein Buch, das sich speziell mit der grafischen Oberfläche JavaFX oder Swing beschäftigt, ist genauso umfangreich wie die jetzige »Insel«. Nicht anders verhält es sich mit weiteren Spezialthemen, wie etwa objektorientierter Analyse/Design, UML, paralleler oder verteilter Programmierung, Enterprise Java, Datenbankanbindung, OR-Mapping, Webservices, dynamischen Webseiten und vielen anderen Themen. Hier muss ein Spezialbuch die Neugier befriedigen.
Die »Insel« trainiert die Syntax der Programmiersprache sowie den Umgang mit den wichtigen Standardbibliotheken, Entwicklungstools und Entwicklungsumgebungen, mit objektorientierter Analyse und Design, Entwurfsmustern und Programmkonventionen. Sie hilft aber weniger, am Abend auf der Party die netten Mädels und coolen IT-Geeks zu beeindrucken und mit nach Hause zu nehmen. Sorry.
Java-Version und Entwicklungsumgebung
Als Grundlage dient die Java Platform Standard Edition (Java SE) in der Version 25 auf Basis der freien Implementierung OpenJDK. Das Java Development Kit (JDK) umfasst Compiler und Laufzeitumgebung (JVM) und steht für Windows, macOS und Linux zur Verfügung.
Eine integrierte Entwicklungsumgebung (IDE) ist nicht Teil des JDK; dieses Buch zeigt vor allem IntelliJ, die Beispiele lassen sich jedoch auch mit anderen IDEs oder Editoren wie Visual Studio Code übersetzen und ausführen.
Java erscheint zweimal jährlich in neuen Versionen, von denen das Long-Term-Support-Release (LTS) über längere Zeit gepflegt werden. Dieses Buch baut auf der aktuellen Oracle-LTS-Version Java 25 auf. Für die didaktische Vermittlung der objektorientierten Programmierung spielt die exakte Version jedoch keine Rolle.
Das Buch in der Lehre einsetzen
Die »Insel« eignet sich ideal für das Selbststudium. Das erste Kapitel dient zum Warmwerden. Wer noch keine Entwicklungsumgebung eingerichtet hat, sollte zunächst ein JDK installieren. Da das JDK nur Kommandozeilentools enthält, empfiehlt es sich anschließend, eine grafische IDE (Integrated Development Environment) zu verwenden. Eine IDE macht die Arbeit mit Java-Programmen erheblich komfortabler und bietet gegenüber der reinen Kommandozeile einige Vorteile:
-
Das Editieren, Compilieren und Laufenlassen eines Java-Programms sind schnell und einfach über einen Tastendruck oder Mausklick möglich.
-
Ein Editor sollte die Syntax von Java farbig hervorheben (Syntax-Highlighting).
-
Eine kontextsensitive Hilfe zeigt bei Methoden die Parameter an, und gleichzeitig verweist sie auf die API-Dokumentation.
-
Weitere Vorteile wie GUI-Builder, Projektmanagement und Debuggen kommen dazu, spielen in diesem Buch aber keine Rolle.
In der Softwareentwicklung ist die Dokumentation der API-Schnittstellen unerlässlich. Sie ist von der Entwicklungsumgebung aus in der Regel über einen Tastendruck einsehbar oder online zu finden. Unter welcher URL sie verfügbar ist, erklärt ebenfalls Kapitel 1.
Richtig los geht es mit Kapitel 2, und von da an geht es didaktisch Schritt für Schritt weiter. Wer Kenntnisse in JavaScript, C, C# oder C++ hat, kann Kapitel 2 locker überfliegen. Personen, die schon in C#/C++ objektorientiert programmiert haben, können Kapitel 3 rasch lesen und dann einsteigen. Objektorientierter Mittelpunkt des Buches sind Kapitel 6 und Kapitel 7: Sie vermitteln die OO-Begriffe Klasse, Methode, Assoziation, Vererbung und dynamisches Binden. Nach Kapitel 7 ist die objektorientierte Grundausbildung abgeschlossen, und nach Kapitel 15 sind die Grundlagen von Java bekannt.
Persönliche Lernstrategien
Wer das Buch im Selbststudium nutzt, wird wissen wollen, was eine erfolgreiche Lernstrategie ist. Der Schlüssel zur Erkenntnis ist, wie so oft, die Lernpsychologie, die untersucht, unter welchen Lesebedingungen ein Text optimal verstanden werden kann. Die Methode, die ich vorstellen möchte, heißt PQ4R-Methode, benannt nach den Anfangsbuchstaben der Schritte, die die Methode vorgibt:
-
Vorschau (Preview): Zunächst sollten Sie sich einen ersten Überblick über die Kapitel verschaffen, etwa durch Blättern im Inhaltsverzeichnis und in den Seiten der einzelnen Kapitel. Schauen Sie sich die Abbildungen und Tabellen etwas länger an, da sie schon den Inhalt verraten und Lust auf den Text vermitteln.
-
Fragen (Question): Jedes Kapitel versucht, einen thematischen Block zu vermitteln. Vor dem Lesen eines Kapitels sollten Sie sich überlegen, welche Fragen das Kapitel beantworten soll.
-
Lesen (Read): Jetzt geht’s los – der Text wird durchgelesen. Wenn es nicht gerade ein geliehenes Büchereibuch ist, sollten Sie Passagen, die Ihnen wichtig erscheinen, mit vielen Farben hervorheben und mit Randbemerkungen versehen. Das Gleiche gilt für neue Begriffe. Die zuvor gestellten Fragen sollte jeder beantworten können. Tauchen neue Fragen auf: im Gedächtnis abspeichern!
-
Nachdenken (Reflect): Egal ob motiviert oder nicht – das ist ein interessantes Ergebnis einer anderen Studie –, lernen kann jeder immer. Der Erfolg hängt nur davon ab, wie tief das Wissen verarbeitet wird (elaborierte Verarbeitung). Dazu müssen die Themen mit anderen Themen verknüpft werden. Überlegen Sie, wie die Aussagen mit den anderen Teilen zusammenpassen. Dies ist auch ein guter Zeitpunkt für praktische Übungen. Für die angegebenen Beispiele im Buch sollten Sie sich eigene Beispiele überlegen. Wenn ich eine if-Abfrage am Beispiel des Alters beschreibe, wäre eine eigene Idee etwa eine if-Abfrage zur Hüpfballgröße.
-
Wiedergeben (Recite): Die zuvor gestellten Fragen sollten sich nun beantworten lassen, und zwar ohne den Text. Für mich ist das Schreiben eine gute Möglichkeit, über mein Wissen zu reflektieren, doch sollte dies jeder auf seine Weise tun. Allemal ist es lustig, sich während des Duschens über alle Schlüsselwörter und ihre Bedeutung, den Zusammenhang zwischen abstrakten Klassen und Schnittstellen usw. klar zu werden. Ein Tipp: Lautes Erklären...




