
Java Übungsbuch
Description
Alles über E-Books | Antworten auf Fragen rund um E-Books, Kopierschutz und Dateiformate finden Sie in unserem Info- & Hilfebereich.
- Trainieren Sie Ihre Java-Kenntnisse
- Learning by Doing anhand praktischer Übungen
- Mit vollständigen und kommentierten Lösungen
Dieses Buch ist kein Lehrbuch, sondern ein reines Übungsbuch und wendet sich an Leser, die ihre Java-Kenntnisse anhand zahlreicher praktischer Übungen durch »Learning by Doing« vertiefen und festigen möchten. Es ist ideal, um sich auf Prüfungen vorzubereiten oder das Programmieren mit Java praktisch zu üben.
Jedes Kapitel beginnt mit einer kompakten Zusammenfassung des Stoffs, der in den Übungsaufgaben dieses Kapitels verwendet wird. Anschließend haben Sie die Möglichkeit, zwischen Aufgaben in drei verschiedenen Schwierigkeitsstufen - von einfach bis anspruchsvoll - zu wählen. Anhand dieser Aufgaben können Sie Ihr Wissen praktisch testen. Am Ende der Kapitel finden Sie vollständige und kommentierte Musterlösungen.
Es werden folgende Themen abgedeckt:
Die Kapitel 1 bis 3 enthalten Aufgaben zur objektorientierten Programmierung mit Java.
In Kapitel 4 geht es im Detail um Generics und das Collection Framework, seine generischen Klassen und Interfaces sowie die Definition von Enumerationen. Kapitel 5 erläutert das Exception Handling.
Kapitel 6 beschäftigt sich mit den neuen Sprachmitteln von Java 8, Lambdas und Streams. Kapitel 7 bietet einen Einblick in die mit Java 9 vorgenommene Modularisierung der Java-Plattform.
In Kapitel 8 werden Weiterentwicklungen aus den Java-Versionen 14 bis 17 behandelt. Dazu gehören die Einführung von Records und Sealed Classes sowie das Pattern Matching (sowohl für den instanceof-Operator als auch für switch). Kapitel 9 enthält viele Aufgaben zu Tests mit JUnit 5 und Gradle sowie eine kurze Einführung in beide Systeme.
Nach dem Durcharbeiten des Buches verfügen Sie über fundierte Programmierkenntnisse und einen umfangreichen Fundus an Beispielcode.
Aus dem Inhalt:
- Klassendefinition und Objektinstanziierung
- Abgeleitete Klassen und Vererbung
- Abstrakte Klassen und Interfaces
- Die Definition von Annotationen
- Innere Klassen
- Generics und Reflection
- Lambdas
- Funktionale Interfaces
- Switch Expressions
- Local Variable Type Inference
- Definition und Nutzung von Streams
- Das Modulsystem von Java
- Records
- Sealed Classes und Interfaces
- Pattern Matching für den instanceof-Operator
- Pattern Matching für switch
- Tests mit JUnit 5 und Gradle
Reviews / Votes
»Egal ob für die Prüfungsvorbereitung oder als Begleitbuch für die tägliche Arbeit, dieses Übungsbuch ist ein unverzichtbares Werkzeug für alle, die Java nicht nur verstehen, sondern auch anwenden wollen.« (10/2024, Die Magie der Bücher)
»Wer die eigenen Kenntnisse in der Programmiersprache Java verbessern möchte, findet hier praktische Übungen nebst Lösungen.« (Mac Life Magazin, 04/2022)
»Elisabeth Jung legt den Fokus auf die Vermittlung der Java-Sprachspezifikation samt ihren Feinheiten. [.] Der extreme didaktische Tiefgang sorgt dafür, dass der geneigte Leser nach dem Durchackern der gut 550 Seiten mit Sicherheit ein wesentlich besseres Verständnis der Möglichkeiten und Feinheiten des Java-Sprachstandards hat.« (Java Magazin, 01/2022)
More details
Other editions
Additional editions

Person
Content
- Cover
- Titel
- Impressum
- Inhaltsverzeichnis
- Einleitung
- Vorkenntnisse
- Aufbau des Buches
- Benötigte Software
- Downloads
- Autorin
- Kapitel 1: Klassendefinition und Objektinstanziierung
- 1.1 Klassen und Objekte
- Aufgabe 1.1: Definition einer Klasse
- Aufgabe 1.2: Objekt (Instanz) einer Klasse erzeugen
- 1.2 Das Überladen von Methoden
- Aufgabe 1.3: Eine Methode überladen
- 1.3 Die Datenkapselung, ein Prinzip der objektorientierten Programmierung
- Aufgabe 1.4: Zugriffsmethoden
- 1.4 Das »aktuelle Objekt« und die »this-Referenz«
- Aufgabe 1.5: Konstruktordefinitionen
- 1.5 Die Wert- und Referenzübergabe in Methodenaufrufen
- Aufgabe 1.6: Wertübergabe in Methoden (»call by value«)
- 1.6 Globale und lokale Referenzen
- Aufgabe 1.7: Der Umgang mit Referenzen
- 1.7 Java-Pakete
- Aufgabe 1.8: Die package-Anweisung
- Aufgabe 1.9: Die import-Anweisung
- 1.8 Die Modifikatoren für Felder und Methoden in Zusammenhang mit der Definition von Paketen
- Aufgabe 1.10: Pakete und die Sichtbarkeit von Membern einer Klasse
- 1.9 Standard-Klassen von Java
- 1.10 Die Wrapper-Klassen von Java und das Auto(un)boxing
- Aufgabe 1.11: Das Auto(un)boxing
- 1.11 Das Paket java.lang.reflect
- 1.12 Arrays (Reihungen) und die Klassen Array und Arrays
- Aufgabe 1.12: Der Umgang mit Array-Objekten
- 1.13 Zeichenketten und die Klasse String
- Aufgabe 1.13: Der Umgang mit String-Objekten
- Aufgabe 1.14: Der Umgang mit Textblöcken
- 1.14 Sprachmerkmale, die in den weiteren Beispielen genutzt werden
- Aufgabe 1.15: Methoden mit variablen Argumentenlisten
- 1.15 Den Zugriff auf Klassen und Felder minimieren: Unveränderliche (immutable) Klassen und Objekte
- 1.16 Die alte und neue Date&Time-API als Beispiel für veränderliche und unveränderliche Klassen
- Aufgabe 1.16: Die Methoden von Date/Time-Klassen
- 1.17 Private Konstruktoren
- Aufgabe 1.17: Objekte mithilfe eines privaten Konstruktors erzeugen
- 1.18 Lösungen
- Lösung 1.1
- Lösung 1.2
- Lösung 1.3
- Lösung 1.4
- Lösung 1.5
- Lösung 1.6
- Lösung 1.7
- Lösung 1.8
- Lösung 1.9
- Lösung 1.10
- Lösung 1.11
- Lösung 1.12
- Lösung 1.13
- Lösung 1.14
- Lösung 1.15
- Lösung 1.16
- Lösung 1.17
- Kapitel 2: Abgeleitete Klassen und Vererbung
- 2.1 Abgeleitete Klassen
- 2.2 Die Konstruktoren von abgeleiteten Klassen
- 2.3 Abgeleitete Klassen und die Sichtbarkeit von Feldern und Methoden
- Aufgabe 2.1: Test von Sichtbarkeitsebenen im Zusammenhang mit abgeleiteten Klassen
- 2.4 Das Verdecken von Klassenmethoden und das statische Binden von Methoden
- Aufgabe 2.2: Der Aufruf von verdeckten Klassenmethoden
- 2.5 Das Überschreiben von Instanzmethoden und das dynamische Binden von Methoden
- Aufgabe 2.3: Das dynamische Binden von Methoden
- 2.6 Vererbung und Komposition
- Aufgabe 2.4: Die Komposition
- Aufgabe 2.5: Die Vererbung
- 2.7 Kovariante Rückgabetypen in Methoden
- Aufgabe 2.6: Die Benutzung von kovarianten Rückgabetypen
- 2.8 Verdeckte Felder
- 2.9 Vergrößernde und verkleinernde Konvertierung (»up- und down-casting«)
- 2.10 Der Polymorphismus, ein Prinzip der objektorientierten Programmierung
- Aufgabe 2.7: Der »Subtyp-Polymorphismus« im Kontext einer Klassenhierarchie
- 2.11 Die Methoden der Klassen java.lang.Object und java.util.Objects
- Aufgabe 2.8: Die equals()- und hashCode()-Methoden von Object
- Aufgabe 2.9: Die equals()-Methode und die Vererbung
- 2.12 Das Klonen und die Gleichheit von geklonten Objekten
- Aufgabe 2.10: Das Klonen von Instanzen der eigenen Klasse
- Aufgabe 2.11: Das Klonen von Instanzen anderer Klassen
- Aufgabe 2.12: Das Klonen und der Copy-Konstruktor
- 2.13 Der Garbage Collector und das Beseitigen von Objekten
- 2.14 Lösungen
- Lösung 2.1
- Lösung 2.2
- Lösung 2.3
- Lösung 2.4
- Lösung 2.5
- Lösung 2.6
- Lösung 2.7
- Lösung 2.8
- Lösung 2.9
- Lösung 2.10
- Lösung 2.11
- Lösung 2.12
- Kapitel 3: Die Definition von abstrakten Klassen, Interfaces und Annotationen
- 3.1 Abstrakte Klassen
- 3.2 Abstrakte Java-Standard-Klassen und eigene Definitionen von abstrakten Klassen
- Aufgabe 3.1: Die abstrakte Klasse Number und ihre Unterklassen
- Aufgabe 3.2: Definition einer eigenen abstrakten Klasse
- 3.3 Interfaces (Schnittstellen)
- Aufgabe 3.3: Die Definition eines Interface
- 3.4 Die Entscheidung zwischen abstrakten Klassen und Interfaces
- Aufgabe 3.4: Paralleler Einsatz von Interfaces und abstrakten Klassen
- 3.5 Implementieren mehrerer Interfaces für eine Klasse
- Aufgabe 3.5: Das Ableiten von Interfaces
- 3.6 Die Definition von inneren Klassen
- Aufgabe 3.6: Ein Beispiel mit anonymer Klasse
- 3.7 Erweiterungen in der Definition von Interfaces
- Aufgabe 3.7: Private Interface-Methoden
- 3.8 Die Definition von Annotationen
- 3.9 Vordefinierte Annotationstypen
- Aufgabe 3.8: Annotationen an Methoden und Parameter von Methoden anheften
- Aufgabe 3.9: Eine Klasse annotieren
- Aufgabe 3.10: Die @Override- und @Inherited-Annotation
- 3.10 Lösungen
- Lösung 3.1
- Lösung 3.2
- Lösung 3.3
- Lösung 3.4
- Lösung 3.5
- Lösung 3.6
- Lösung 3.7
- Lösung 3.8
- Lösung 3.9
- Lösung 3.10
- Kapitel 4: Generics
- 4.1 Die Generizität
- 4.2 Generische Klassen und Interfaces
- Aufgabe 4.1: Generischer Datentyp als Behälter für die Instanzen vom Typ des Klassenparameters
- Aufgabe 4.2: Generischer Datentyp als »Über-Typ« für die Instanzen vom Typ des Klassenparameters
- 4.3 Wildcardtypen
- Aufgabe 4.3: Ungebundene Wildcardtypen
- Aufgabe 4.4: Obere und untere Schranken für Wildcardtypen
- 4.4 Legacy Code, Erasure und Raw-Typen
- Aufgabe 4.5: Raw-Typen am Beispiel einer generischen Klasse mit zwei Typparametern
- Aufgabe 4.6: Brückenmethoden (»bridge methods«)
- 4.5 Generische Arrays
- Aufgabe 4.7: Erzeugen von generischen Arrays
- 4.6 Generische Methoden
- Aufgabe 4.8: Generische Methodendefinitionen
- 4.7 Generische Standard-Klassen und -Interfaces
- 4.8 for-each-Schleifen für Collections
- Aufgabe 4.9: Das Interface List&E& und die Klasse ArrayList&E&
- Aufgabe 4.10: Das Interface Collection&E& und die Klasse Vector&E&
- Aufgabe 4.11: Das Interface Map&K,V& und die Klasse TreeMap&K,V&
- 4.9 Factory-Methoden in Collections
- Aufgabe 4.12: Factory-Methoden für List, Set und Map
- 4.10 Die Interfaces Enumeration&E&, Iterable&T& und Iterator&E&
- 4.11 Enumerationen und die generische Klasse Enum&E extends Enum&E&&
- Aufgabe 4.13: Die Definition von Enumerationen
- 4.12 Die Interfaces Comparable&T& und Comparator&T& und das Sortieren von Objekten
- Aufgabe 4.14: Das Comparable&T&-Interface
- Aufgabe 4.15: Comparable&T& versus Comparator&T&
- 4.13 Typinferenz für Methoden
- 4.14 Typinferenz beim Erzeugen von Instanzen eines generischen Typs
- Aufgabe 4.16: Typinferenz beim Instanziieren von generischen Klassen
- Aufgabe 4.17: Der Diamond-Operator in Java 9
- 4.15 Lösungen
- Lösung 4.1
- Lösung 4.2
- Lösung 4.3
- Lösung 4.4
- Lösung 4.5
- Lösung 4.6
- Lösung 4.7
- Lösung 4.8
- Lösung 4.9
- Lösung 4.10
- Lösung 4.11
- Lösung 4.12
- Lösung 4.13
- Lösung 4.14
- Lösung 4.15
- Lösung 4.16
- Lösung 4.17
- Kapitel 5: Exceptions und Errors
- 5.1 Ausnahmen auslösen
- 5.2 Ausnahmen abfangen oder weitergeben
- Aufgabe 5.1: Unbehandelte RuntimeExceptions
- Aufgabe 5.2: Behandelte RuntimeExceptions
- 5.3 Das Verwenden von finally in der Ausnahmebehandlung
- Aufgabe 5.3: Der finally-Block
- 5.4 Ausnahmen manuell auslösen
- 5.5 Exception-Unterklassen erzeugen
- Aufgabe 5.4: Benutzerdefinierte Ausnahmen manuell auslösen
- 5.6 Multi-catch-Klausel und verbesserte Typprüfung beim Rethrowing von Exceptions
- Aufgabe 5.5: Disjunction-Typ für Exceptions
- Aufgabe 5.6: Typprüfung beim Rethrowing von Exceptions
- 5.7 Lösungen
- Lösung 5.1
- Lösung 5.2
- Lösung 5.3
- Lösung 5.4
- Lösung 5.5
- Lösung 5.6
- Kapitel 6: Lambdas und Streams
- 6.1 Mittels anonymer Klassen Code an Methoden übergeben
- 6.2 Funktionale Interfaces
- 6.3 Syntax und Deklaration von Lambda-Ausdrücken
- Aufgabe 6.1: Lambda-Ausdruck ohne Parameter versus anonymer Klasse
- Aufgabe 6.2: Lambda-Ausdruck mit Parameter versus anonymer Klasse
- 6.4 Scoping und Variable Capture
- Aufgabe 6.3: Die Umgebung von Lambda-Ausdrücken
- 6.5 Methoden- und Konstruktor-Referenzen
- Aufgabe 6.4: Methoden-Referenzen in Zuweisungen
- Aufgabe 6.5: Konstruktor-Referenzen und die neuen funktionalen Interfaces Supplier&T& und Function&T,R&
- 6.6 Default- und statische Methoden in Interfaces
- 6.7 Das neue Interface Stream
- 6.8 Die forEach-Methoden von Iterator, Iterable und Stream
- Aufgabe 6.6: Die funktionalen Interfaces BiConsumer&T,U&, BiPredicate&T,U& und BiFunction&T,U,R&
- Aufgabe 6.7: Die Methoden des Interface Stream und die Behandlung von Exceptions in Lambda-Ausdrücken
- 6.9 Das Interface Collector und die Klasse Collectors: Reduktion mittels Methoden von Streams und Kollektoren.
- Aufgabe 6.8: Weitere Methoden des Interface Stream: limit(), count(), max(), min(), skip(), reduce() und collect()
- Aufgabe 6.9: Das Interface Collector und die Klasse Collectors
- 6.10 Parallele Streams
- Aufgabe 6.10: Parallele Streams
- 6.11 Die map()- und flatMap()-Methoden von Stream und Optional
- Aufgabe 6.11: map() versus flatMap()
- 6.12 Spracherweiterungen mit Java 10, Java 11, Java 12 und Java 13
- Aufgabe 6.12: Typinferenz für lokale Variablen in Java 10 und Java 11
- Aufgabe 6.13: Switch-Statements und Switch-Expressions
- 6.13 Lösungen
- Lösung 6.1
- Lösung 6.2
- Lösung 6.3
- Lösung 6.4
- Lösung 6.5
- Lösung 6.6
- Lösung 6.7
- Lösung 6.8
- Lösung 6.9
- Lösung 6.10
- Lösung 6.11
- Lösung 6.12
- Lösung 6.13
- Kapitel 7: Die Modularität von Java
- 7.1 Das Java-Modulsystem
- Aufgabe 7.1: Eine einfache Modul-Definition
- Aufgabe 7.2: Eine Applikation mit mehreren Modulen
- Aufgabe 7.3: Implizites Lesen von Modulen
- Aufgabe 7.4: Eine modulbasierte Service-Implementierung
- 7.2 Lösungen
- Lösung 7.1
- Lösung 7.2
- Lösung 7.3
- Lösung 7.4
- Kapitel 8: Records, Sealed Classes und Pattern Matching
- 8.1 Das Pattern Matching für den instanceof-Operator
- 8.2 Der neue Java-Typ Record
- 8.3 Sealed Classes in Java
- 8.4 Das Pattern Matching für switch
- Aufgabe 8.1: Die Definition von record-Klassen und das Pattern Matching für den instanceof-Operator
- Aufgabe 8.2: sealed-, final- und non-sealed-Klassen
- Aufgabe 8.3: sealed-Interfaces und das Pattern Matching
- Aufgabe 8.4: Algebraische Datentypen (ADTs), ein weiterer Schritt in Richtung funktionale Programmierung
- Aufgabe 8.5 Das Pattern Matching für switch
- 8.5 Lösungen
- Lösung 8.1
- Lösung 8.2
- Lösung 8.3
- Kapitel 9: JUnit-Tests
- 9.1 JUnit 5 im Überblick
- 9.2 Tests schreiben
- 9.3 Testen mit dem ConsoleLauncher und der JupiterEngine
- Aufgabe 9.1: Die Klassen App und AppTest
- Aufgabe 9.2: Die Klasse PublishingBookmitOrderingTest
- Aufgabe 9.3: Die Klassen AdditionmitMap und AdditionmitMapTest
- Aufgabe 9.4: Die Klassen MyClassTest und BuchmitEqualsTest
- Aufgabe 9.5: Die Klasse TestBeispiele
- Aufgabe 9.6: Die Klassen RechenOperationenTest und RechenOperationenParametrisierteTests
- Aufgabe 9.7: Die Klasse AssertThrowsTest
- 9.4 JUnit-Tests mit Gradle
- 9.5 Lösungen
- Lösung 9.1
- Lösung 9.3
- Lösung 9.4
- Lösung 9.5
- Stichwortverzeichnis
System requirements
File format: PDF
Copy protection: Watermark-DRM (Digital Rights Management)
System requirements:
- Computer (Windows; MacOS X; Linux): Use the free software Adobe Reader, Adobe Digital Editions, or any other PDF viewer of your choice (see eBook Help).
- Tablet/Smartphone (Android; iOS): Install the free app Adobe Digital Editions or another reading app for eBooks, e.g., PocketBook (see eBook Help).
- E-reader: Bookeen, Kobo, Pocketbook, Sony, Tolino and many more (only limited: Kindle).
The file format PDF always displays a book page identically on any hardware. This makes PDF suitable for complex layouts such as those used in textbooks and reference books (images, tables, columns, footnotes). Unfortunately, on the small screens of e-readers or smartphones, PDFs are rather annoying, requiring too much scrolling.
This eBook uses Watermark-DRM, a „soft” copy protection. This means that there are no technical restrictions to prevent illegal distribution. However, there is a personalised watermark embedded in the eBook that can be used to identify the purchaser of the eBook in the event of misuse and to provide evidence for legal purposes.
For more information, see our eBook Help page.