E-Book, Deutsch, 1223 Seiten
Reihe: Rheinwerk Computing
Ullenboom Java ist auch eine Insel
17. Auflage 2023
ISBN: 978-3-8362-9546-8
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Einführung, Ausbildung, Praxis
E-Book, Deutsch, 1223 Seiten
Reihe: Rheinwerk Computing
ISBN: 978-3-8362-9546-8
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Die 'Insel' ist die erste Wahl, wenn es um aktuelles und praktisches Java-Wissen geht. Java-Einsteiger, Studierende und Umsteigerinnen profitieren von diesem Lehrwerk. Neben der Behandlung der Sprachgrundlagen von Java gibt es kompakte Einführungen in Spezialthemen. So erfahren Sie einiges über Threads, Algorithmen, GUIs, Dateien und Datenströme. Dieses Buch ist das Standardwerk für die Java-Programmierung. Es liegt aktuell in der 17. Auflage vor.
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.
Christian Ullenboom, Dipl.-Informatiker, ist zertifizierter Java-Programmierer und seit 1997 Trainer und Berater für Java-Technologien und objektorientierte Analyse und Design. Seit Jahren teilt er sein Wissen mit unzähligen Besuchern seiner Website, wo er Fragen beantwortet, Inhalte bereitstellt und diskutiert. Seine Sympathie gilt Java Performance Tuning und den sinnlichen Freuden des Lebens.
Autoren/Hrsg.
Weitere Infos & Material
Materialien zum Buch ... 31 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 ... Weiterentwicklung und Verluste ... 66 1.5 ... Java-Plattformen: Java SE, Jakarta EE, Java ME, Java Card ... 70 1.6 ... Java SE-Implementierungen ... 74 1.7 ... JDK installieren ... 77 1.8 ... Das erste Programm compilieren und testen ... 79 1.9 ... Entwicklungsumgebungen ... 83 1.10 ... Zum Weiterlesen ... 89 2. Imperative Sprachkonzepte ... 91 2.1 ... Elemente der Programmiersprache Java ... 91 2.2 ... Von der Klasse zur Anweisung ... 99 2.3 ... Datentypen, Typisierung, Variablen und Zuweisungen ... 111 2.4 ... Ausdrücke, Operanden und Operatoren ... 127 2.5 ... Bedingte Anweisungen oder Fallunterscheidungen ... 151 2.6 ... Immer das Gleiche mit den Schleifen ... 170 2.7 ... Methoden einer Klasse ... 188 2.8 ... Zum Weiterlesen ... 212 3. Klassen und Objekte ... 213 3.1 ... Objektorientierte Programmierung (OOP) ... 213 3.2 ... Eigenschaften einer Klasse ... 215 3.3 ... Natürlich modellieren mit der UML (Unified Modeling Language) * ... 217 3.4 ... Neue Objekte erzeugen ... 219 3.5 ... ZZZZZnake ... 231 3.6 ... Pakete schnüren, Importe und Compilationseinheiten ... 233 3.7 ... Mit Referenzen arbeiten, Vielfalt, Identität, Gleichwertigkeit ... 241 3.8 ... Zum Weiterlesen ... 253 4. Arrays und ihre Anwendungen ... 255 4.1 ... Einfache Feldarbeit ... 255 4.2 ... Die erweiterte for-Schleife ... 267 4.3 ... Methode mit variabler Argumentanzahl (Varargs) ... 271 4.4 ... Mehrdimensionale Arrays * ... 273 4.5 ... Bibliotheksunterstützung von Arrays ... 279 4.6 ... Die Klasse Arrays zum Vergleichen, Füllen, Suchen und Sortieren nutzen ... 282 4.7 ... Der Einstiegspunkt für das Laufzeitsystem: main(...) ... 295 4.8 ... Zum Weiterlesen ... 298 5. Der Umgang mit Zeichen und Zeichenketten ... 299 5.1 ... Von ASCII über ISO-8859-1 zu Unicode ... 299 5.2 ... Datentypen für Zeichen und Zeichenfolgen ... 307 5.3 ... Die Character-Klasse ... 308 5.4 ... Zeichenfolgen ... 313 5.5 ... Die Klasse String und ihre Methoden ... 315 5.6 ... Veränderbare Zeichenketten mit StringBuilder und StringBuffer ... 348 5.7 ... CharSequence als Basistyp ... 357 5.8 ... Konvertieren zwischen Primitiven und Strings ... 360 5.9 ... Strings zusammenhängen (konkatenieren) ... 368 5.10 ... Zerlegen von Zeichenketten ... 370 5.11 ... Ausgaben formatieren ... 375 5.12 ... Zum Weiterlesen ... 381 6. Eigene Klassen schreiben ... 383 6.1 ... Eigene Klassen mit Eigenschaften deklarieren ... 383 6.2 ... Privatsphäre und Sichtbarkeit ... 394 6.3 ... Eine für alle -- statische Methoden und Klassenvariablen ... 405 6.4 ... Konstanten und Aufzählungen ... 412 6.5 ... Objekte anlegen und zerstören ... 420 6.6 ... Klassen- und Objektinitialisierung * ... 434 6.7 ... Zum Weiterlesen ... 443 7. Objektorientierte Beziehungsfragen ... 445 7.1 ... Assoziationen zwischen Objekten ... 445 7.2 ... Vererbung ... 455 7.3 ... Typen in Hierarchien ... 465 7.4 ... Methoden überschreiben ... 479 7.5 ... Drum prüfe, wer sich dynamisch bindet ... 485 7.6 ... Finale Klassen und finale Methoden ... 488 7.7 ... Abstrakte Klassen und abstrakte Methoden ... 490 7.8 ... Weiteres zum Überschreiben und dynamischen Binden ... 499 7.9 ... Zum Weiterlesen und Programmieraufgabe ... 505 8. Records, Schnittstellen, Aufzählungen, versiegelte Klassen ... 507 8.1 ... Records ... 507 8.2 ... Schnittstellen ... 518 8.3 ... Aufzählungstypen ... 550 8.4 ... Versiegelte Klassen und Schnittstellen ... 560 8.5 ... Zum Weiterlesen ... 568 9. Ausnahmen müssen sein ... 569 9.1 ... Problembereiche einzäunen ... 570 9.2 ... Ausnahmen mit throws nach oben reichen ... 579 9.3 ... Die Klassenhierarchie der Ausnahmen ... 580 9.4 ... Abschlussbehandlung mit finally ... 590 9.5 ... Auslösen eigener Exceptions ... 595 9.6 ... try mit Ressourcen (automatisches Ressourcen-Management) ... 611 9.7 ... Besonderheiten bei der Ausnahmebehandlung * ... 621 9.8 ... Harte Fehler -- Error * ... 627 9.9 ... Assertions * ... 627 9.10 ... Zum Weiterlesen ... 630
10. Geschachtelte Typen ... 631 10.1 ... Geschachtelte Klassen, Schnittstellen und Aufzählungen ... 631 10.2 ... Statische geschachtelte Typen ... 633 10.3 ... Nichtstatische geschachtelte Typen ... 635 10.4 ... Lokale Klassen ... 638 10.5 ... Anonyme innere Klassen ... 639 10.6 ... Vermischtes ... 644 10.7 ... Zum Weiterlesen ... 648
11. Besondere Typen der Java SE ... 649 11.1 ... Object ist die Mutter aller Klassen ... 650 11.2 ... Schwache Referenzen und Cleaner ... 672 11.3 ... Die Utility-Klasse java.util.Objects ... 673 11.4 ... Vergleichen von Objekten und Ordnung herstellen ... 677 11.5 ... Wrapper-Klassen und Autoboxing ... 686 11.6 ... Iterator, Iterable * ... 706 11.7 ... Annotationen in der Java SE ... 714 11.8 ... Zum Weiterlesen ... 719
12. Generics ... 721 12.1 ... Einführung in Java Generics ... 721 12.2 ... Umsetzen der Generics, Typlöschung und Raw-Types ... 737 12.3 ... Die Typen über Bounds einschränken ... 745 12.4 ... Typparameter in der throws-Klausel * ... 748 12.5 ... Generics und Vererbung, Invarianz ... 752 12.6 ... Konsequenzen der Typlöschung: Typ-Token, Arrays und Brücken * ... 766 12.7 ... Zum Weiterlesen ... 775
13. Lambda-Ausdrücke und funktionale Programmierung ... 777 13.1 ... Funktionale Schnittstellen und Lambda-Ausdrücke ... 777 13.2 ... Methodenreferenz ... 801 13.3 ... Konstruktorreferenz ... 805 13.4 ... Funktionale Programmierung ... 809 13.5 ... Funktionale Schnittstellen aus dem java.util.function-Paket ... 818 13.6 ... Optional ist keine Nullnummer ... 832 13.7 ... Was ist jetzt so funktional? ... 843 13.8 ... Zum Weiterlesen ... 845
14. Architektur, Design und angewandte Objektorientierung ... 847 14.1 ... SOLIDe Modellierung ... 847 14.2 ... Architektur, Design und Implementierung ... 851 14.3 ... Design-Patterns (Entwurfsmuster) ... 852 14.4 ... Zum Weiterlesen ... 859
15. Java Platform Module System ... 861 15.1 ... Klassenlader (Class Loader) und Modul-/Klassenpfad ... 861 15.2 ... Module im JPMS einbinden ... 867 15.3 ... Eigene Module entwickeln ... 873 15.4 ... Zum Weiterlesen ... 881
16. Die Klassenbibliothek ... 883 16.1 ... Die Java-Klassenphilosophie ... 883 16.2 ... Einfache Zeitmessung und Profiling * ... 890 16.3 ... Die Klasse Class ... 891 16.4 ... Die Utility-Klassen System und Properties ... 894 16.5 ... Sprachen der Länder ... 902 16.6 ... Wichtige Datum-Klassen im Überblick ... 906 16.7 ... Date-Time-API ... 909 16.8 ... Logging mit Java ... 914 16.9 ... Maven: Build-Management und Abhängigkeiten auflösen ... 917 16.10 ... Zum Weiterlesen ... 919
17. Einführung in die nebenläufige Programmierung ... 921 17.1 ... Nebenläufigkeit und Parallelität ... 921 17.2 ... Existierende Threads und neue Threads erzeugen ... 925 17.3 ... Thread-Eigenschaften und Zustände ... 931 17.4 ... Der Ausführer (Executor) kommt ... 943 17.5 ... Zum Weiterlesen ... 958
18. Einführung in Datenstrukturen und Algorithmen ... 959 18.1 ... Listen ... 959 18.2 ... Mengen (Sets) ... 977 18.3 ... Assoziative Speicher ... 987 18.4 ... Ausgewählte Basistypen ... 994 18.5 ... Java-Stream-API ... 994 18.6 ... Einen Stream erzeugen ... 997 18.7 ... Terminale Operationen ... 1001 18.8 ... Intermediäre Operationen ... 1012 18.9 ... Zum Weiterlesen ... 1019
19. Einführung in grafische Oberflächen ... 1021 19.1 ... GUI-Frameworks ... 1021 19.2 ... Deklarative und programmierte Oberflächen ... 1025 19.3 ... GUI-Builder ... 1026 19.4 ... Mit dem Eclipse WindowBuilder zur ersten Swing-Oberfläche ... 1027 19.5 ... Grundlegendes zum Zeichnen ... 1039 19.6 ... Zum Weiterlesen ... 1045
20. Einführung in Dateien und Datenströme ... 1047 20.1 ... Alte und neue Welt in java.io und java.nio ... 1047 20.2 ... Dateisysteme und Pfade ... 1048 20.3 ... Dateien mit wahlfreiem Zugriff ... 1058 20.4 ... Basisklassen für die Ein-/Ausgabe ... 1064 20.5 ... Lesen aus Dateien und Schreiben in Dateien ... 1076 20.6 ... Zum Weiterlesen ... 1082
21. Einführung ins Datenbankmanagement mit JDBC ... 1083 21.1 ... Relationale Datenbanken und Java-Zugriffe ... 1083 21.2 ... Eine Beispielabfrage ... 1086 21.3 ... Zum Weiterlesen ... 1088
22. Bits und Bytes, Mathematisches und Geld ... 1089 22.1 ... Bits und Bytes ... 1089 22.2 ... Fließkomma-Arithmetik in Java ... 1104 22.3 ... Die Eigenschaften der Klasse Math ... 1110 22.4 ... Genauigkeit, Wertebereich eines Typs und Überlaufkontrolle * ... 1121 22.5 ... Zufallszahlen: Random, ThreadLocalRandom und SecureRandom ... 1127 22.6 ... Große Zahlen * ... 1131 22.7 ... Geld und Währung ... 1144 22.8 ... Zum Weiterlesen ... 1146
23. Testen mit JUnit ... 1147 23.1 ... Softwaretests ... 1147 23.2 ... Das Test-Framework JUnit ... 1148 23.3 ... Java-Assertions-Bibliotheken und AssertJ ... 1161 23.4 ... Aufbau größerer Testfälle ... 1163 23.5 ... Wie gutes Design das Testen ermöglicht ... 1165 23.6 ... Dummy, Fake, Stub und Mock ... 1167 23.7 ... JUnit-Erweiterungen, Testzusätze ... 1169 23.8 ... Zum Weiterlesen ... 1170
24. Die Werkzeuge des JDK ... 1171 24.1 ... Übersicht ... 1171 24.2 ... Java-Quellen übersetzen ... 1172 24.3 ... Die Java-Laufzeitumgebung ... 1173 24.4 ... Dokumentationskommentare mit Javadoc ... 1176 24.5 ... Das Archivformat JAR ... 1186 24.6 ... Zum Weiterlesen ... 1188 Anhang ... 1171 A ... Java SE-Module und Paketübersicht ... 1189 Index ... 1207
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, Design von Klassen und der Aufbau der Java-Standardbibliotheken.
Über dieses Buch
Die Zielgruppe
Die Kapitel dieses Buches sind für Einsteiger 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 eingeht oder auf die Frage, was Programmieren eigentlich ist. Wer also schon in einer beliebigen Sprache programmiert hat, der liegt mit diesem Buch genau richtig!
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. Viele Bereiche aus dem Leben eines Industrieprogrammierers behandelt die »Insel« 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 – beides Teile von Standard-Java –, ist genauso umfangreich wie die jetzige »Insel«. Nicht anders verhält es sich mit den anderen Spezialthemen, wie etwa objektorientierter Analyse/Design, UML, paralleler oder verteilter Programmierung, Enterprise JavaBeans, Datenbankanbindung, OR-Mapping, Webservices, dynamischen Webseiten und vielen anderen Themen. Hier muss ein Spezialbuch die Neugier befriedigen.
Die »Insel« trainiert die Syntax der Programmiersprache, den Umgang mit den wichtigen Standardbibliotheken, Entwicklungstools und Entwicklungsumgebungen, objektorientierte Analyse und Design, Entwurfsmuster 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.
Mein Leben und Java – oder warum es noch ein Java-Buch gibt
Meine Beschäftigung mit Java begann vor über 20 Jahren und hängt mit einer universitären Pflichtveranstaltung zusammen. In unserer Projektgruppe befassten wir uns 1997 mit einer objektorientierten Dialogspezifikation. Ein Zustandsautomat musste programmiert werden, und die Frage nach der Programmiersprache stand an. Da ich den Seminarteilnehmern Java vorstellen wollte, arbeitete ich einen Foliensatz für den Vortrag aus. Parallel zu den Folien erwartete der Professor eine Ausarbeitung in Form einer Seminararbeit. Die Beschäftigung mit Java machte mir Spaß und war etwas ganz anderes, als ich bis dahin gewohnt war. Vor Java hatte ich rund zehn Jahre in Assembler kodiert, später dann mit den Hochsprachen Pascal und C, vorwiegend Compiler. Ich probierte aus, schrieb meine Erfahrungen auf und lernte dabei Java und die Bibliotheken kennen. Die Arbeit wuchs mit meinen Erfahrungen. Während der Projektgruppe sprach mich ein Kommilitone an, ob ich nicht Lust hätte, als Referent eine Java-Weiterbildung zu geben. Lust hatte ich – aber keine Unterlagen. So schrieb ich weiter, um für den Kurs Schulungsunterlagen zu haben. Als der Professor am Ende der Projektgruppe nach der Seminararbeit fragte, war die Vorform der »Insel« schon so umfangreich, dass die vorliegende Einleitung mehr oder weniger zur Seminararbeit wurde.
Das war 1997, und natürlich hätte ich mit dem Schreiben sofort aufhören können, nachdem ich die Seminararbeit abgegeben hatte. Doch bis heute macht mir Java immer noch viel Spaß, und ich freue mich auf jede neue Version. Und mit meinem Optimismus bin ich nicht allein: Die Prognosen für Java stehen ungebrochen gut, weil der Einsatz von Java mittlerweile so gefestigt ist wie der von COBOL bei Banken und Versicherungen. Daher wird immer wieder davon gesprochen, Java sei das neue COBOL.
Nach rund zwei Jahrzehnten sehe ich die »Insel« heute als ein sehr facettenreiches Java-Buch für die ambitionierten Entwickler an, die hinter die Kulissen schauen wollen. Der Detailgrad der »Insel« wird von keinem anderen (mir bekannten) deutsch- oder englischsprachigen Grundlagenbuch erreicht.[ 1 ] Die Erweiterung der »Insel« macht mir Spaß, auch wenn viele Themen kaum in einem normalen Java-Kurs angesprochen werden.
Software und Versionen
Als Grundlage für dieses Buch dient die Java Platform Standard Edition (Java SE) in der Version 21 in der freien Implementierung OpenJDK, wobei JDK für Java Development Kit steht. Das JDK besteht im Wesentlichen aus einem Compiler und einer Laufzeitumgebung (JVM) und ist für die Plattformen Windows, macOS, Linux und Solaris erhältlich.
Eine grafische Entwicklungsoberfläche (IDE) ist kein Teil des JDK. Zwar verlasse ich mich ungern auf einen Hersteller, weil die Hersteller unterschiedliche Entwicklergruppen ansprechen, doch stellt die Insel die Entwicklungsumgebung IntelliJ etwas genauer vor. Die Beispielprogramme lassen sich grundsätzlich mit beliebigen anderen Entwicklungsumgebungen oder Texteditoren – wie Visual Studio Code oder vi – eingeben und auf der Kommandozeile übersetzen. Reine Texteditoren sind in der Entwicklung allerdings nicht mehr zeitgemäß, sodass ein grafischer Kommandozeilenaufsatz die Programmerstellung vereinfacht.
Welche Java-Version verwenden wir?
Seit Oracle (damals noch von Sun geführt) die Programmiersprache Java 1995 mit Version 1.0 vorstellte, hat sich die Versionsspirale unaufhaltsam gedreht. Mittlerweile gibt es halbjährlich (im März und September) eine neue Version. Für manche Java-Versionen bieten die Hersteller einen längeren Zeitraum der Unterstützung, diese Versionen werden Long-Term-Support-Release (LTS) genannt.
Besonders für Java-Buch-Autoren stellt sich die Frage, auf welcher Java-Version ihr Text aufbauen muss und welche Bibliotheken sie beschreiben sollen. Ich beschreibe immer die Möglichkeiten der letzten Oracle-LTS-Version, was zur Drucklegung Java 21 war. Für die Didaktik der objektorientierten Programmierung ist die Versionsfrage glücklicherweise unerheblich.
Das Buch in der Lehre einsetzen
Die »Insel« eignet sich ideal zum Selbststudium. Das erste Kapitel dient zum Warmwerden. Wer auf dem Rechner noch keine Entwicklungsumgebung installiert hat, der sollte zuerst ein JDK installieren. Weil das JDK nur Kommandozeilentools installiert, sollte jeder Entwickler eine grafische IDE (Integrated Development Environment) installieren, da eine IDE die Entwicklung von Java-Programmen deutlich komfortabler macht. Eine IDE bietet gegenüber der rohen 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. Wer schon in C#/C++ objektorientiert programmiert hat, kann...