Java Übungsbuch - Für die Versionen Java 8 bis Java 13 - Aufgaben mit vollständigen Lösungen

Book description

  • 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 und die Neuerungen aus den Versionen 8 bis 13, die sich auf die neue Date&Time-API, Textblöcke, Compact Strings und die Weiterentwicklung von Interfaces beziehen.

Kapitel 4 behandelt im Detail Generics und das Collection Framework mit all seinen generischen Klassen und Interfaces sowie die Definition von Enumerationen. Kapitel 5 erläutert das Exception-Handling.

Das Kapitel 6 beschäftigt sich mit den neuen Sprachmitteln von Java 8, Lambdas und Streams, sowie mit weiteren Neuerungen aus den Versionen 8 bis 13 wie Switch Expressions und Local Variable Type Inference.

Kapitel 7 bietet einen Einblick in die mit Java 9 vorgenommene Modularisierung der Java-Plattform.

Nach dem Durcharbeiten des Buches verfügen Sie über fundierte Programmierkenntnisse und einen umfangreichen Fundus an Beispielcode.

Aus dem Inhalt:
  • Klassendefinition und Objektinstanziierung
  • Java-Standard-Klassen und -Interfaces
  • Abgeleitete Klassen und Vererbung
  • Abstrakte Klassen und Interfaces
  • Die Definition von Annotationen
  • Textblöcke
  • Innere Klassen
  • Generics und Reflection
  • Typprüfung und Typsicherheit in Java
  • Lambdas
  • Methoden- und Konstruktor-Referenzen
  • Funktionale Interfaces
  • Definition und Nutzung von Streams
  • Reduktion und Kollektoren
  • Local Variable Type Inference
  • Switch Expressions
  • Das Modulsystem von Java

Table of contents

  1. Impressum
  2. Einleitung
    1. Vorkenntnisse
    2. Aufbau des Buches
    3. Benötigte Software
  3. Autorin
  4. Kapitel 1: Klassendefinition und Objektinstanziierung
    1. 1.1 Klassen und Objekte
      1. Aufgabe 1.1: Definition einer Klasse
      2. Aufgabe 1.2: Objekt (Instanz) einer Klasse erzeugen
    2. 1.2 Das Überlad‌en von Methoden
      1. Aufgabe 1.3: Eine Methode überladen
    3. 1.3 Die Datenkapselu‌ng, ein Prinzip der objektorientierten Programmierung
      1. Aufgabe 1.4: Zugriffsmethod‌en
    4. 1.4 Das »aktuelle Objekt« und die »this-Refere‌nz«
      1. Aufgabe 1.5: Konstruktordefinitionen
    5. 1.5 Die Wert- und Referenzübergabe in Methodenaufrufen
      1. Aufgabe 1.6: Wertübergabe in Methoden (»call by value«)
    6. 1.6 Globa‌le und lokale Referen‌zen
      1. Aufgabe 1.7: Der Umgang mit Referenzen
    7. 1.7 Java-Pakete‌
      1. Aufgabe 1.8: Die package-Anweisu‌ng
      2. Aufgabe 1.9: Die import-Anweisung
    8. 1.8 Die Modifikatoren für Felder und Methoden in Zusammenhang mit der Definition von Paket‌en
      1. Aufgabe 1.10: Pakete und die Sichtbarkeit von Membern einer Klasse
    9. 1.9 Standard-Klassen von Java
    10. 1.10 Die Wrapper-Klass‌en von Java und das Auto(un)boxing
      1. Aufgabe 1.11: Das Auto(un)boxing
    11. 1.11 Das Paket java.lang.reflect
    12. 1.12 Arrays (Reihungen) und die Klassen Arr‌ay und Arr‌ays
      1. Aufgabe 1.12: Der Umgang mit Array-Objekten
    13. 1.13 Zeichenketten und die Klasse String
      1. Aufgabe 1.13: Der Umgang mit String-Objekten
      2. Aufgabe 1.14: Der Umgang mit Textblöcken
    14. 1.14 Sprachmerkmale, die in den weiteren Beispielen genutzt werden
      1. Aufgabe 1.15: Methoden mit variablen Argumentenlis‌ten
    15. 1.15 Den Zugriff auf Klassen und Felder minimieren: Unveränderliche (immutable) Klassen und Objekte
    16. 1.16 Die alte und neue Date&Time-API als Beispiel für veränderliche und unveränderliche Klassen
      1. Aufgabe 1.16: Die Methoden von Date/Time-Klassen
    17. 1.17 Private Konstruktoren‌
      1. Aufgabe 1.17: Objekte mithilfe eines privaten Konstruktors erzeugen
    18. 1.18 Lösungen
      1. Lösung 1.1
      2. Lösung 1.2
      3. Lösung 1.3
      4. Lösung 1.4
      5. Lösung 1.5
      6. Lösung 1.6
      7. Lösung 1.7
      8. Lösung 1.8
      9. Lösung 1.9
      10. Lösung 1.10
      11. Lösung 1.11
      12. Lösung 1.12
      13. Lösung 1.13
      14. Lösung 1.14
      15. Lösung 1.15
      16. Lösung 1.16
      17. Lösung 1.17
  5. Kapitel 2: Abgeleitete Klassen und Vererbung
    1. 2.1 Abgeleitete Klassen
    2. 2.2 Die Konstruktoren von abgeleiteten Klassen
    3. 2.3 Abgeleitete Klassen und die Sichtbarkeit von Feldern und Methoden
      1. Aufgabe 2.1: Test von Sichtbarkeitsebenen im Zusammenhang mit abgeleiteten Klassen
    4. 2.4 Das Verdecken von Klassenmethoden und das statische Binden von Methoden
      1. Aufgabe 2.2: Der Aufruf von verdeckten Klassenmethoden
    5. 2.5 Das Überschreiben von Instanzmethoden und das dynamische Binden von Methoden
      1. Aufgabe 2.3: Das dynamische Binden von Methoden
    6. 2.6 Vererbung und Komposition
      1. Aufgabe 2.4: Die Komposition
      2. Aufgabe 2.5: Die Vererbung
    7. 2.7 Kovariante Rückgabetypen in Methoden
      1. Aufgabe 2.6: Die Benutzung von kovarianten Rückgabetypen
    8. 2.8 Verdeckte Felder
    9. 2.9 Vergrößernde und verkleinernde Konvertierung (»up- und down-casting«)
    10. 2.10 Der Polymorphismus, ein Prinzip der objektorientierten Programmierung
      1. Aufgabe 2.7: Der »Subtyp-Polymorphismus« im Kontext einer Klassenhierarchie
    11. 2.11 Die Methoden der Klassen java.lang.Object‌ und java.util.Objects‌
      1. Aufgabe 2.8: Die equals()‌- und hashCode()‌-Methoden von Object
      2. Aufgabe 2.9: Die equals()-Methode und die Vererbung
    12. 2.12 Das Klonen und die Gleichheit von geklonten Objekten
      1. Aufgabe 2.10: Das Klonen von Instanzen der eigenen Klasse
      2. Aufgabe 2.11: Das Klonen von Instanzen anderer Klassen
      3. Aufgabe 2.12: Das Klonen und der Copy-Konstrukto‌r
    13. 2.13 Der Garbage Collector und das Beseitigen von Objekten
    14. 2.14 Lösungen
      1. Lösung 2.1
      2. Lösung 2.2
      3. Lösung 2.3
      4. Lösung 2.4
      5. Lösung 2.5
      6. Lösung 2.6
      7. Lösung 2.7
      8. Lösung 2.8
      9. Lösung 2.9
      10. Lösung 2.10
      11. Lösung 2.11
      12. Lösung 2.12
  6. Kapitel 3: Die Definition von abstrakten Klassen, Interfaces und Annotationen
    1. 3.1 Abstrakte Klassen
    2. 3.2 Abstrakte Java-Standard-Klassen und eigene Definitionen von abstrakten Klassen
      1. Aufgabe 3.1: Die abstrakte Klasse Number und ihre Unterklassen
      2. Aufgabe 3.2: Definition einer eigenen abstrakten Klasse
    3. 3.3 Interfaces (Schnittstelle‌n)
      1. Aufgabe 3.3: Die Definition eines Interface
    4. 3.4 Die Entscheidung zwischen abstrakten Klassen und Interfaces
      1. Aufgabe 3.4: Paralleler Einsatz von Interfaces und abstrakten Klassen
    5. 3.5 Implementieren mehrerer Interfaces für eine Klasse
      1. Aufgabe 3.5: Das Ableiten von Interfaces
    6. 3.6 Die Definition von inneren Klassen
      1. Aufgabe 3.6: Ein Beispiel mit anonymer Klasse
    7. 3.7 Erweiterungen in der Definition von Interfaces
      1. Aufgabe 3.7: Private Interface-Methoden
    8. 3.8 Die Definition von Annotationen
    9. 3.9 Vordefinierte Annotationstypen
      1. Aufgabe 3.8: Annotationen an Methoden und Parameter von Methoden anheften
      2. Aufgabe 3.9: Eine Klasse annotieren
      3. Aufgabe 3.10: Die @Overrid‌e- und @Inherited-Annotation
    10. 3.10 Lösungen
      1. Lösung 3.1
      2. Lösung 3.2
      3. Lösung 3.3
      4. Lösung 3.4
      5. Lösung 3.5
      6. Lösung 3.6
      7. Lösung 3.7
      8. Lösung 3.8
      9. Lösung 3.9
      10. Lösung 3.10
  7. Kapitel 4: Generics
    1. 4.1 Die Generizitä‌t
    2. 4.2 Generische Klassen und Interfaces
      1. Aufgabe 4.1: Generischer Datentyp als Behälter für die Instanzen vom Typ des Klassenparameters
      2. Aufgabe 4.2: Generischer Datentyp als »Über-Typ« für die Instanzen vom Typ des Klassenparameters
    3. 4.3 Wildcardtyp‌en
      1. Aufgabe 4.3: Ungebundene Wildcardtypen
      2. Aufgabe 4.4: Obere und untere Schranken für Wildcardtypen
    4. 4.4 Legacy Co‌de, Eras‌ure und Raw-T‌ypen
      1. Aufgabe 4.5: Raw-Typen am Beispiel einer generischen Klasse mit zwei Typparametern
      2. Aufgabe 4.6: Brückenmethode‌n (»bridge metho‌ds«)
    5. 4.5 Generische Arrays
      1. Aufgabe 4.7: Erzeugen von generischen Arrays
    6. 4.6 Generische Methoden
      1. Aufgabe 4.8: Generische Methodendefinitionen
    7. 4.7 Generische Standard-Klassen und -Interfaces
    8. 4.8 for-each-Schleifen‌ für Collections
      1. Aufgabe 4.9: Das Interface List‌<E> und die Klasse ‌ArrayList<E>
      2. Aufgabe 4.10: Das Interface Collection<E‌> und die Klasse Vector‌<E>
      3. Aufgabe 4.11: Das Interface Map<K,V>‌ und die Klasse TreeMap<K,‌V>
    9. 4.9 Factory-Methoden in Collections
      1. Aufgabe 4.12: Factory-Methoden für List, Set und Map
    10. 4.10 Die Interfaces Enumeration<‌E>, Iterable‌<T> und Iterato‌r<E>
    11. 4.11 Enumerationen und die generische Klasse Enum<E extends Enum<E>>
      1. Aufgabe 4.13: Die Definition von Enumerationen
    12. 4.12 Die Interfaces Comparable<T> und Comparator<T> und das Sortieren von Objekten
      1. Aufgabe 4.14: Das Comparable<T>‌-Interface
      2. Aufgabe 4.15: Comparable<T> versus Comparator<T>‌
    13. 4.13 Typinferenz‌ für Methoden
    14. 4.14 Typinferenz‌ beim Erzeugen von Instanzen eines generischen Typs
      1. Aufgabe 4.16: Typinferenz beim Instanziieren von generischen Klassen
      2. Aufgabe 4.17: Der Diamond-Operator in Java 9
    15. 4.15 Lösungen
      1. Lösung 4.1
      2. Lösung 4.2
      3. Lösung 4.3
      4. Lösung 4.4
      5. Lösung 4.5
      6. Lösung 4.6
      7. Lösung 4.7
      8. Lösung 4.8
      9. Lösung 4.9
      10. Lösung 4.10
      11. Lösung 4.11
      12. Lösung 4.12
      13. Lösung 4.13
      14. Lösung 4.14
      15. Lösung 4.15
      16. Lösung 4.16
      17. Lösung 4.17
  8. Kapitel 5: Exceptions und Errors
    1. 5.1 Ausnahmen auslösen
    2. 5.2 Ausnahmen abfangen oder weitergeben
      1. Aufgabe 5.1: Unbehandelte RuntimeExceptions
      2. Aufgabe 5.2: Behandelte RuntimeExceptions
    3. 5.3 Das Verwenden von finally in der Ausnahmebehandlung
      1. Aufgabe 5.3: Der finally-Block
    4. 5.4 Ausnahmen manuell auslösen
    5. 5.5 Exception-Unterklassen erzeugen
      1. Aufgabe 5.4: Benutzerdefinierte Ausnahmen manuell auslösen
    6. 5.6 Multi-catch-Klausel und verbesserte Typprüfung beim Rethrowing von Exceptions
      1. Aufgabe 5.5: Disjunction-Typ für Exceptions
      2. Aufgabe 5.6: Typprüfung beim Rethrowing von Exceptions
    7. 5.7 Lösungen
      1. Lösung 5.1
      2. Lösung 5.2
      3. Lösung 5.3
      4. Lösung 5.4
      5. Lösung 5.5
      6. Lösung 5.6
  9. Kapitel 6: Lambdas und Streams
    1. 6.1 Mittels anonymer Klassen Code an Methoden übergeben
    2. 6.2 Funktionale Interfaces
    3. 6.3 Syntax und Deklaration von Lambda-Ausdrücken
      1. Aufgabe 6.1: Lambda-Ausdruck ohne Parameter versus anonymer Klasse
      2. Aufgabe 6.2: Lambda-Ausdruck mit Parameter versus anonymer Klasse‌
    4. 6.4 Scoping‌ und Variable Capture‌
      1. Aufgabe 6.3: Die Umgebung von Lambda-Ausdrücken
    5. 6.5 Methoden‌- und Konstruktor-Referenzen‌
      1. Aufgabe 6.4: Methoden-Referenzen‌ in Zuweisungen
      2. Aufgabe 6.5: Konstruktor-Referenzen und die neuen funktionalen Interfaces Supplier<T>‌ und Function<T,R>‌
    6. 6.6 Default- und statische Methoden in Interfaces
    7. 6.7 Das neue Interface Stream
    8. 6.8 Die forEach-Methoden von Iterator, Iterable und Stream
      1. Aufgabe 6.6: Die funktionalen Interfaces BiConsumer<T,U>, BiPredicate<T,U> und BiFunction<T,U,R>
      2. Aufgabe 6.7: Die Methoden des Interface Stream und die Behandlung von Exceptions in Lambda-Ausdrücken
    9. 6.9 Das Interface Collector und die Klasse Collectors: Reduktion mittels Methoden von Streams und Kollektoren.
      1. Aufgabe 6.8: Weitere Methoden des Interface Stream: limit(), count(), max(), min(), skip(), reduce() und collect()
      2. Aufgabe 6.9: Das Interface Collector‌ und die Klasse Collectors‌
    10. 6.10 Parallele Streams
      1. Aufgabe 6.10: Parallele Streams
    11. 6.11 Die map(‌)- und flatMap‌()-Methoden von Stream und Optional
      1. Aufgabe 6.11: map() versus flatMap()
    12. 6.12 Spracherweiterungen mit Java 10, Java 11, Java 12 und Java 13
      1. Aufgabe 6.12: Typinferenz für lokale Variablen in Java 10 und Java 11
      2. Aufgabe 6.13: Switch-Statements‌ und Switch-Expressions‌
    13. 6.13 Lösungen
      1. Lösung 6.1
      2. Lösung 6.2
      3. Lösung 6.3
      4. Lösung 6.4
      5. Lösung 6.5
      6. Lösung 6.6
      7. Lösung 6.7
      8. Lösung 6.8
      9. Lösung 6.9
      10. Lösung 6.10
      11. Lösung 6.11
      12. Lösung 6.12
      13. Lösung 6.13
  10. Kapitel 7: Die Modularität von Java
    1. 7.1 Das Java-Modulsystem
      1. Aufgabe 7.1: Eine einfache Modul-Definition
      2. Aufgabe 7.2: Eine Applikation mit mehreren Modulen
      3. Aufgabe 7.3: Implizites Lesen von Modulen
      4. Aufgabe 7.4: Eine modulbasierte Service-Implementierung
    2. 7.2 Lösungen
      1. Lösung 7.1
      2. Lösung 7.2
      3. Lösung 7.3
      4. Lösung 7.4

Product information

  • Title: Java Übungsbuch - Für die Versionen Java 8 bis Java 13 - Aufgaben mit vollständigen Lösungen
  • Author(s): Elisabeth Jung
  • Release date: January 2020
  • Publisher(s): mitp Verlag
  • ISBN: 9783747501252