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...
Autor principal: | |
---|---|
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<
- T>
- 4.5.2 Das Interface UnaryOperator<
- T>
- 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<
- T>
- 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<
- T>
- in JDK 9
- 6.5.5 Erweiterung in Optional<
- T>
- 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<
- E>
- 11.2 Das Executor-Framework
- 11.2.1 Einführung.
- 11.2.2 Definition von Aufgaben.