Der Weg zum Java-Profi Konzepte und Techniken für die professionelle Java-Entwicklung

Long description: Standardwerk in 5. Neuauflage ! Das Standardwerk für die professionelle Javaentwicklung Fundierter Überblick über Profithemen, die man sonst nicht findet. Alles, was man braucht, um im Coding-Job mithalten zu können Dieses Buch bietet eine umfassende Einführung in die...

Descripción completa

Detalles Bibliográficos
Autor principal: Inden, Michael (-)
Formato: Libro electrónico
Idioma:Alemán
Publicado: Heidelberg : dpunkt.verlag 2020.
Edición:5th ed
Materias:
Ver en Biblioteca Universitat Ramon Llull:https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009630861806719
Tabla de Contenidos:
  • Intro
  • 1 Einleitung
  • 1.1 Über dieses Buch
  • 1.1.1 Motivation
  • 1.1.2 Was leistet dieses Buch und was nicht?
  • 1.1.3 Wie und was soll mithilfe des Buchs gelernt werden?
  • 1.1.4 Wer sollte dieses Buch lesen?
  • 1.2 Aufbau des Buchs
  • 1.3 Konventionen und ausführbare Programme
  • I Java-Grundlagen, Analyse und Design
  • 2 Professionelle Arbeitsumgebung
  • 2.1 Vorteile von IDEs am Beispiel von Eclipse
  • 2.2 Projektorganisation
  • 2.2.1 Projektstruktur in Eclipse
  • 2.2.2 Projektstruktur für Maven und Gradle
  • 2.3 Einsatz von Versionsverwaltungen
  • 2.3.1 Arbeiten mit zentralen Versionsverwaltungen
  • 2.3.2 Dezentrale Versionsverwaltungen
  • 2.3.3 VCS und DVCS im Vergleich
  • 2.4 Einsatz eines Unit-Test-Frameworks
  • 2.4.1 Das JUnit-Framework
  • 2.4.2 Parametrierte Tests mit JUnit 5
  • 2.4.3 Vorteile von Unit Tests
  • 2.5 Debugging
  • 2.5.1 Fehlersuche mit einem Debugger
  • 2.5.2 Remote Debugging
  • 2.6 Deployment von Java-Applikationen
  • 2.6.1 Das JAR-Tool im Kurzüberblick
  • 2.6.2 JAR inspizieren und ändern, Inhalt extrahieren
  • 2.6.3 Metainformationen und das Manifest
  • 2.6.4 Inspizieren einer JAR-Datei
  • 2.7 Einsatz eines IDE-unabhängigen Build-Prozesses
  • 2.7.1 Maven im Überblick
  • 2.7.2 Builds mit Gradle
  • 2.7.3 Vorteile von Maven und Gradle
  • 2.8 Weiterführende Literatur
  • 3 Objektorientiertes Design
  • 3.1 OO-Grundlagen
  • 3.1.1 Grundbegriffe
  • 3.1.2 Beispielentwurf: Ein Zähler
  • 3.1.3 Vom imperativen zum objektorientierten Entwurf
  • 3.1.4 Diskussion der OO-Grundgedanken
  • 3.1.5 Wissenswertes zum Objektzustand
  • 3.2 Grundlegende OO-Techniken
  • 3.2.1 Schnittstellen (Interfaces)
  • 3.2.2 Basisklassen und abstrakte Basisklassen
  • 3.2.3 Interfaces und abstrakte Basisklassen
  • 3.3 Wissenswertes zu Vererbung
  • 3.3.1 Probleme durch Vererbung
  • 3.3.2 Delegation statt Vererbung
  • 3.4 Fortgeschrittenere OO-Techniken.
  • 3.4.1 Read-only-Interface
  • 3.4.2 Immutable-Klasse
  • 3.4.3 Marker-Interface
  • 3.4.4 Konstantensammlungen und Aufzählungen
  • 3.4.5 Value Object (Data Transfer Object)
  • 3.5 Prinzipien guten OO-Designs
  • 3.5.1 Geheimnisprinzip nach Parnas
  • 3.5.2 Law of Demeter
  • 3.5.3 SOLID-Prinzipien
  • 3.6 Formen der Varianz
  • 3.6.1 Grundlagen der Varianz
  • 3.6.2 Kovariante Rückgabewerte
  • 3.7 Generische Typen (Generics)
  • 3.7.1 Einführung
  • 3.7.2 Generics und Auswirkungen der Type Erasure
  • 3.8 Weiterführende Literatur
  • 4 Lambdas, Methodenreferenzen und Defaultmethoden
  • 4.1 Einstieg in Lambdas
  • 4.1.1 Syntax von Lambdas
  • 4.1.2 Functional Interfaces und SAM-Typen
  • 4.1.3 Exceptions in Lambdas
  • 4.2 Syntaxerweiterungen in Interfaces
  • 4.2.1 Defaultmethoden
  • 4.2.2 Statische Methoden in Interfaces
  • 4.3 Methodenreferenzen
  • 4.4 Externe vs. interne Iteration
  • 4.5 Wichtige Functional Interfaces für Collections
  • 4.5.1 Das Interface Predicate&lt
  • T&gt
  • 4.5.2 Das Interface UnaryOperator&lt
  • T&gt
  • 4.6 Praxiswissen: Definition von Lambdas
  • 5 Java-Grundlagen
  • 5.1 Die Klasse Object
  • 5.1.1 Die Methode toString()
  • 5.1.2 Die Methode equals()
  • 5.2 Primitive Typen und Wrapper-Klassen
  • 5.2.1 Grundlagen
  • 5.2.2 Konvertierung von Werten
  • 5.2.3 Wissenswertes zu Auto-Boxing und Auto-Unboxing
  • 5.2.4 Ausgabe und Verarbeitung von Zahlen
  • 5.3 Stringverarbeitung
  • 5.3.1 Die Klasse String
  • 5.3.2 Die Klassen StringBuffer und StringBuilder
  • 5.3.3 Ausgaben mit format() und printf()
  • 5.3.4 Die Methode split() und reguläre Ausdrücke
  • 5.3.5 Optimierung bei Strings in JDK 9
  • 5.3.6 Neue Methoden in der Klasse String in JDK 11
  • 5.4 Varianten innerer Klassen
  • 5.5 Ein- und Ausgabe (I/O)
  • 5.5.1 Dateibehandlung und die Klasse File
  • 5.5.2 Ein- und Ausgabestreams im Überblick.
  • 5.5.3 Zeichencodierungen bei der Ein- und Ausgabe
  • 5.5.4 Speichern und Laden von Daten und Objekten
  • 5.5.5 Dateiverarbeitung mit dem NIO
  • 5.5.6 Neue Hilfsmethoden in der Klasse Files in JDK 11
  • 5.6 Fehlerbehandlung
  • 5.6.1 Einstieg in die Fehlerbehandlung
  • 5.6.2 Checked Exceptions und Unchecked Exceptions
  • 5.6.3 Besonderheiten beim Exception Handling
  • 5.6.4 Exception Handling und Ressourcenfreigabe
  • 5.6.5 Assertions
  • 5.7 Weitere Neuerungen in JDK 9, 10 und 11
  • 5.7.1 Erweiterung der @Deprecated-Annotation in JDK 9
  • 5.7.2 Syntaxerweiterung var in JDK 10 und 11
  • 5.7.3 Versionsverarbeitung mit JDK 9 und 10
  • 5.8 Weiterführende Literatur
  • II Bausteine stabiler Java-Applikationen
  • 6 Das Collections-Framework
  • 6.1 Datenstrukturen und Containerklassen
  • 6.1.1 Wahl einer geeigneten Datenstruktur
  • 6.1.2 Arrays
  • 6.1.3 Das Interface Collection
  • 6.1.4 Das Interface Iterator
  • 6.1.5 Listen und das Interface List
  • 6.1.6 Mengen und das Interface Set
  • 6.1.7 Grundlagen von hashbasierten Containern
  • 6.1.8 Grundlagen automatisch sortierender Container
  • 6.1.9 Die Methoden equals(), hashCode() und compareTo() im Zusammenspiel
  • 6.1.10 Schlüssel-Wert-Abbildungen und das Interface Map
  • 6.1.11 Erweiterungen am Beispiel der Klasse HashMap
  • 6.1.12 Erweiterungen im Interface Map in JDK 8
  • 6.1.13 Collection-Factory-Methoden in JDK 9
  • 6.1.14 Unveränderliche Kopien von Collections mit Java 10
  • 6.1.15 Entscheidungshilfe zur Wahl von Datenstrukturen
  • 6.2 Suchen und Sortieren
  • 6.2.1 Suchen
  • 6.2.2 Sortieren von Arrays und Listen
  • 6.2.3 Sortieren mit Komparatoren
  • 6.2.4 Erweiterungen im Interface Comparator mit JDK 8
  • 6.3 Utility-Klassen und Hilfsmethoden
  • 6.3.1 Nützliche Hilfsmethoden
  • 6.3.2 Dekorierer synchronized und unmodifiable
  • 6.3.3 Vordefinierte Algorithmen in der Klasse Collections.
  • 6.4 Containerklassen: Generics und Varianz
  • 6.5 Die Klasse Optional&lt
  • T&gt
  • 6.5.1 Grundlagen zur Klasse Optional
  • 6.5.2 Weiterführendes Beispiel und Diskussion
  • 6.5.3 Verkettete Methodenaufrufe
  • 6.5.4 Erweiterungen in der Klasse Optional&lt
  • T&gt
  • in JDK 9
  • 6.5.5 Erweiterung in Optional&lt
  • T&gt
  • in JDK 10 und 11
  • 6.6 Fallstricke im Collections-Framework
  • 6.6.1 Wissenswertes zu Arrays
  • 6.6.2 Wissenswertes zu Stack, Queue und Deque
  • 6.7 Weiterführende Literatur
  • 7 Das Stream-API
  • 7.1 Grundlagen zu Streams
  • 7.1.1 Streams erzeugen - Create Operations
  • 7.1.2 Intermediate und Terminal Operations im Überblick
  • 7.1.3 Zustandslose Intermediate Operations
  • 7.1.4 Zustandsbehaftete Intermediate Operations
  • 7.1.5 Terminal Operations
  • 7.1.6 Wissenswertes zur Parallelverarbeitung
  • 7.1.7 Neuerungen im Stream-API in JDK 9
  • 7.1.8 Neuerungen im Stream-API in JDK 10
  • 7.2 Filter-Map-Reduce
  • 7.2.1 Herkömmliche Realisierung
  • 7.2.2 Filter-Map-Reduce mit JDK 8
  • 7.3 Praxisbeispiele
  • 7.3.1 Aufbereiten von Gruppierungen und Histogrammen
  • 7.3.2 Maps nach Wert sortieren
  • 8 Datumsverarbeitung seit JDK 8
  • 8.1 Überblick über die neu eingeführten Typen
  • 8.1.1 Neue Aufzählungen, Klassen und Interfaces
  • 8.1.2 Die Aufzählungen DayOfWeek und Month
  • 8.1.3 Die Klassen MonthDay, YearMonth und Year
  • 8.1.4 Die Klasse Instant
  • 8.1.5 Die Klasse Duration
  • 8.1.6 Die Aufzählung ChronoUnit
  • 8.1.7 Die Klassen LocalDate, LocalTime und LocalDateTime
  • 8.1.8 Die Klasse Period
  • 8.1.9 Die Klasse ZonedDateTime
  • 8.1.10 Zeitzonen und die Klassen ZoneId und ZoneOffset
  • 8.1.11 Die Klasse Clock
  • 8.1.12 Formatierung und Parsing
  • 8.2 Datumsarithmetik
  • 8.2.1 Einstieg in die Datumsarithmetik
  • 8.2.2 Real-World-Example: Gehaltszahltag
  • 8.3 Interoperabilität mit Legacy-Code
  • 9 Applikationsbausteine.
  • 9.1 Einsatz von Bibliotheken
  • 9.2 Google Guava im Kurzüberblick
  • 9.2.1 String-Aktionen
  • 9.2.2 Stringkonkatenation und -extraktion
  • 9.2.3 Erweiterungen für Collections
  • 9.2.4 Weitere Utility-Funktionalitäten
  • 9.3 Wertebereichs- und Parameterprüfungen
  • 9.4 Logging-Frameworks
  • 9.4.1 Apache log4j2
  • 9.4.2 Tipps und Tricks zum Einsatz von Logging mit log4j2
  • 9.5 Konfigurationsparameter und -dateien
  • 9.5.1 Einlesen von Kommandozeilenparametern
  • 9.5.2 Verarbeitung von Properties
  • 9.5.3 Weitere Möglichkeiten zur Konfigurationsverwaltung
  • 10 Multithreading-Grundlagen
  • 10.1 Threads und Runnables
  • 10.1.1 Definition der auszuführenden Aufgabe
  • 10.1.2 Start, Ausführung und Ende von Threads
  • 10.1.3 Lebenszyklus von Threads und Thread-Zustände
  • 10.1.4 Unterbrechungswünsche durch Aufruf von interrupt()
  • 10.2 Zusammenarbeit von Threads
  • 10.2.1 Konkurrierende Datenzugriffe
  • 10.2.2 Locks, Monitore und kritische Bereiche
  • 10.2.3 Deadlocks und Starvation
  • 10.2.4 Kritische Bereiche und das Interface Lock
  • 10.3 Kommunikation von Threads
  • 10.3.1 Kommunikation mit Synchronisation
  • 10.3.2 Kommunikation über die Methoden wait(), notify() und notifyAll()
  • 10.3.3 Abstimmung von Threads
  • 10.3.4 Unerwartete IllegalMonitorStateExceptions
  • 10.4 Das Java-Memory-Modell
  • 10.4.1 Sichtbarkeit
  • 10.4.2 Atomarität
  • 10.4.3 Reorderings
  • 10.5 Besonderheiten bei Threads
  • 10.5.1 Verschiedene Arten von Threads
  • 10.5.2 Exceptions in Threads
  • 10.5.3 Sicheres Beenden von Threads
  • 10.6 Weiterführende Literatur
  • 11 Modern Concurrency
  • 11.1 Concurrent Collections
  • 11.1.1 Thread-Sicherheit und Parallelität mit »normalen« Collections
  • 11.1.2 Parallelität mit den Concurrent Collections
  • 11.1.3 Blockierende Warteschlangen und das Interface BlockingQueue&lt
  • E&gt
  • 11.2 Das Executor-Framework
  • 11.2.1 Einführung.
  • 11.2.2 Definition von Aufgaben.