Der Weg zum Java-Profi: Konzepte und Techniken für die professionelle Java-Entwicklung
Gespeichert in:
1. Verfasser: | |
---|---|
Format: | Buch |
Sprache: | German |
Veröffentlicht: |
Heidelberg
dpunkt.verlag
2021
|
Ausgabe: | 5., überarbeitete und aktualisierte Auflage |
Schlagworte: | |
Online-Zugang: | Inhaltstext Inhaltsverzeichnis |
Beschreibung: | xxix, 1382 Seiten Illustrationen, Diagramme 24 cm x 16.5 cm |
ISBN: | 9783864907074 3864907071 |
Internformat
MARC
LEADER | 00000nam a22000001c 4500 | ||
---|---|---|---|
001 | BV046970794 | ||
003 | DE-604 | ||
005 | 20211123 | ||
007 | t | ||
008 | 201102s2021 gw a||| |||| 00||| ger d | ||
015 | |a 20,N33 |2 dnb | ||
016 | 7 | |a 1215363710 |2 DE-101 | |
020 | |a 9783864907074 |c hbk. : EUR 52.90 (DE), circa EUR 54.40 (AT) |9 978-3-86490-707-4 | ||
020 | |a 3864907071 |9 3-86490-707-1 | ||
024 | 3 | |a 9783864907074 | |
035 | |a (OCoLC)1226705590 | ||
035 | |a (DE-599)DNB1215363710 | ||
040 | |a DE-604 |b ger |e rda | ||
041 | 0 | |a ger | |
044 | |a gw |c XA-DE-BW | ||
049 | |a DE-91G |a DE-860 |a DE-1050 |a DE-92 |a DE-29T |a DE-1043 |a DE-M347 |a DE-83 |a DE-859 |a DE-739 |a DE-862 |a DE-523 |a DE-526 | ||
084 | |a ST 250 |0 (DE-625)143626: |2 rvk | ||
084 | |a DAT 362 |2 stub | ||
100 | 1 | |a Inden, Michael |d 1971- |e Verfasser |0 (DE-588)143426753 |4 aut | |
245 | 1 | 0 | |a Der Weg zum Java-Profi |b Konzepte und Techniken für die professionelle Java-Entwicklung |c Michael Inden |
250 | |a 5., überarbeitete und aktualisierte Auflage | ||
264 | 1 | |a Heidelberg |b dpunkt.verlag |c 2021 | |
300 | |a xxix, 1382 Seiten |b Illustrationen, Diagramme |c 24 cm x 16.5 cm | ||
336 | |b txt |2 rdacontent | ||
337 | |b n |2 rdamedia | ||
338 | |b nc |2 rdacarrier | ||
650 | 0 | 7 | |a Java Standard Edition 9 |0 (DE-588)113696553X |2 gnd |9 rswk-swf |
689 | 0 | 0 | |a Java Standard Edition 9 |0 (DE-588)113696553X |D s |
689 | 0 | |5 DE-604 | |
710 | 2 | |a Dpunkt.Verlag (Heidelberg) |0 (DE-588)6085529-0 |4 pbl | |
776 | 0 | 8 | |i Erscheint auch als |n Online-Ausgabe, PDF |z 978-3-96088-842-0 |
776 | 0 | 8 | |i Erscheint auch als |n Online-Ausgabe, ePub |z 978-3-96088-843-7 |
776 | 0 | 8 | |i Erscheint auch als |n Online-Ausgabe, Mobi |z 978-3-96088-844-4 |
856 | 4 | 2 | |m X:MVB |q text/html |u http://deposit.dnb.de/cgi-bin/dokserv?id=7534aea73025431b9e4fdfb1fc1c351c&prov=M&dok_var=1&dok_ext=htm |v 2020-08-12 |3 Inhaltstext |
856 | 4 | 2 | |m DNB Datenaustausch |q application/pdf |u http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=032378970&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |3 Inhaltsverzeichnis |
943 | 1 | |a oai:aleph.bib-bvb.de:BVB01-032378970 |
Datensatz im Suchindex
DE-BY-862_location | 2000 |
---|---|
DE-BY-FWS_call_number | 2000/ST 250 J35 I38 W4(5) |
DE-BY-FWS_katkey | 872358 |
DE-BY-FWS_media_number | 083000525575 |
_version_ | 1824556095176179712 |
adam_text |
V
INHALTSUEBERSICHT
1
EINLEITUNG
1
I
JAVA-GRUNDLAGEN,
ANALYSE
UND
DESIGN
11
2
PROFESSIONELLE
ARBEITSUMGEBUNG
13
3
OBJEKTORIENTIERTES
DESIGN
85
4
LAMBDAS,
METHODENREFERENZEN
UND
DEFAULTMETHODEN
199
5
JAVA-GRUNDLAGEN
221
II
BAUSTEINE
STABILER
JAVA-APPLIKATIONEN
325
6
DAS
COLLECTIONS-FRAMEWORK
327
7
DAS
STREAM-API453
8
DATUMSVERARBEITUNG
SEIT
JDK
8
497
9
APPLIKATIONSBAUSTEINE
529
10
MULTITHREADING-GRUNDLAGEN
581
11
MODERN
CONCURRENCY
12
FORTGESCHRITTENE
JAVA-THEMEN
681
13
BASISWISSEN
INTERNATIONALISIERUNG
743
VI
INHALTSUEBERSICHT
III
WICHTIGE
NEUERUNGEN
IN
JAVA
12
BIS
15
771
14
NEUES
UND
AENDERUNGEN
IN
DEN
JAVA-VERSIONEN
12
BIS
15
.
773
IV
MODULARISIERUNG
823
15
MODULARISIERUNG
MIT
PROJECT
JIGSAW
.
825
V
FALLSTRICKE
UND
LOESUNGEN
IM
PRAXISALLTAG
877
16
BADSMELLS
.
879
17
REFACTORINGS
.
953
18
ENTWURFSMUSTER
.1023
VI
QUALITAETSSICHERUNGSMASSNAHMEN
1099
19
PROGRAMMIERSTIL
UND
CODING
CONVENTIONS
.
1101
20
UNIT
TESTS
.1143
21
CODEREVIEWS
.1265
22
OPTIMIERUNGEN
.1273
23
SCHLUSSGEDANKEN
.
1349
VII
ANHANG
1351
A
GRUNDLAGEN
ZUR
JAVA
VIRTUAL
MACHINE
.1353
LITERATURVERZEICHNIS
.
1357
INDEX
.
1361
VII
INHALTSVERZEICHNIS
1
EINLEITUNG
.
1
1.1
UEBER
DIESES
BUCH
.
1
1.1.1
MOTIVATION
.
1
1.1.2
WAS
LEISTET
DIESES
BUCH
UND
WAS
NICHT?
.
2
1.1.3
WIE
UND
WAS
SOLL
MITHILFE
DES
BUCHS
GELERNT
WERDEN?
.
2
1.1.4
WER
SOLLTE
DIESES
BUCH
LESEN?
.
4
1.2
AUFBAU
DES
BUCHS
.
4
1.3
KONVENTIONEN
UND
AUSFUEHRBARE
PROGRAMME
.
6
1
JAVA-GRUNDLAGEN,
ANALYSE
UND
DESIGN
11
2
PROFESSIONELLE
ARBEITSUMGEBUNG
.
13
2.1
VORTEILE
VON
IDES
AM
BEISPIEL
VON
ECLIPSE
.
14
2.2
PROJEKTORGANISATION
.
16
2.2.1
PROJEKTSTRUKTUR
IN
ECLIPSE
.
16
2.2.2
PROJEKTSTRUKTUR
FUER
MAVEN
UND
GRADLE
.
18
2.3 EINSATZ
VON
VERSIONSVERWALTUNGEN
.
20
2.3.1
ARBEITEN
MIT
ZENTRALEN
VERSIONSVERWALTUNGEN
.
23
2.3.2
DEZENTRALE
VERSIONSVERWALTUNGEN
.
28
2.3.3
VCS
UND
DVCS
IM
VERGLEICH
.
34
2.4
EINSATZ
EINES
UNIT-TEST-FRAMEWORKS
.
37
2.4.1
DAS
JUNIT-FRAMEWORK
.
37
2.4.2
PARAMETRIERTE
TESTS
MIT
JUNIT
5
.
43
2.4.3
VORTEILE
VON
UNIT
TESTS
.
45
2.5
DEBUGGING
.
46
2.5.1
FEHLERSUCHE
MIT
EINEM
DEBUGGER
.
47
2.5.2
REMOTE
DEBUGGING
.
50
2.6
DEPLOYMENT
VON
JAVA-APPLIKATIONEN
.
55
2.6.1
DAS
JAR-TOOL
IM
KURZUEBERBLICK
.
56
2.6.2
JAR
INSPIZIEREN
UND
AENDERN,
INHALT
EXTRAHIEREN
.
57
2.6.3
METAINFORMATIONEN
UND
DAS
MANIFEST
.
58
2.6.4
INSPIZIEREN
EINER
JAR-DATEI
.
60
VIII
INHALTSVERZEICHNIS
2.7
EINSATZ
EINES
IDE-UNABHAENGIGEN
BUILD-PROZESSES
.
63
2.7.1
MAVEN
IM
UEBERBLICK
.
65
2.7.2
BUILDS
MIT
GRADLE
.
70
2.7.3
VORTEILE
VON
MAVEN
UND
GRADLE
.
82
2.8
WEITERFUEHRENDE
LITERATUR
.
83
3
OBJEKTORIENTIERTES
DESIGN
.
85
3.1
OO-GRUNDLAGEN
.
86
3.1.1
GRUNDBEGRIFFE
.
86
3.1.2
BEISPIELENTWURF:
EIN
ZAEHLER
.
98
3.1.3
VOM
IMPERATIVEN
ZUM
OBJEKTORIENTIERTEN
ENTWURF
.
106
3.1.4
DISKUSSION
DER
OO-GRUNDGEDANKEN
.
111
3.1.5
WISSENSWERTES
ZUM
OBJEKTZUSTAND
.
114
3.2
GRUNDLEGENDE
OO-TECHNIKEN
.
123
3.2.1
SCHNITTSTELLEN
(INTERFACES)
.
123
3.2.2
BASISKLASSEN
UND
ABSTRAKTE
BASISKLASSEN
.
128
3.2.3
INTERFACES
UND
ABSTRAKTE
BASISKLASSEN
.
130
3.3
WISSENSWERTES
ZU
VERERBUNG
.
132
3.3.1
PROBLEME
DURCH
VERERBUNG
.
132
3.3.2
DELEGATION
STATT
VERERBUNG
.
138
3.4
FORTGESCHRITTENERE
OO-TECHNIKEN
.
142
3.4.1
READ-ONLY-INTERFACE
.
142
3.4.2
IMMUTABLE-KLASSE
.
148
3.4.3
MARKER-INTERFACE
.
153
3.4.4
KONSTANTENSAMMLUNGEN
UND
AUFZAEHLUNGEN
.
154
3.4.5
VALUE
OBJECT
(DATA
TRANSFER
OBJECT)
.
160
3.5
PRINZIPIEN
GUTEN
OO-DESIGNS
.
162
3.5.1
GEHEIMNISPRINZIP
NACH
PARNAS
.
163
3.5.2
LAW
OF
DEMETER
.
164
3.5.3
SOLID-PRINZIPIEN
.
167
3.6
FORMEN
DER
VARIANZ
.
178
3.6.1
GRUNDLAGEN
DER
VARIANZ
.
178
3.6.2
KOVARIANTE
RUECKGABEWERTE
.
182
3.7
GENERISCHE
TYPEN
(GENERICS)
.
184
3.7.1
EINFUEHRUNG
.
184
3.7.2
GENERICS
UND
AUSWIRKUNGEN
DER
TYPE
ERASURE
.
189
3.8
WEITERFUEHRENDE
LITERATUR
.
197
4
LAMBDAS,
METHODENREFERENZEN
UND
DEFAULTMETHODEN
.
199
4.1
EINSTIEG
IN
LAMBDAS
.
199
4.1.1
SYNTAX
VON
LAMBDAS
.
199
4.1.2
FUNCTIONAL
INTERFACES
UND
SAM-TYPEN
.
200
4.1.3
EXCEPTIONS
IN
LAMBDAS
.
204
INHALTSVERZEICHNIS
IX
4.2
SYNTAXERWEITERUNGEN
IN
INTERFACES
.
208
4.2.1
DEFAULTMETHODEN
.
208
4.2.2
STATISCHE
METHODEN
IN
INTERFACES
.
211
4.3
METHODENREFERENZEN
.
213
4.4
EXTERNE
VS.
INTERNE
ITERATION
.
214
4.5
WICHTIGE
FUNCTIONAL
INTERFACES
FUER
COLLECTIONS
.
215
4.5.1
DAS
INTERFACE
PREDICATE T
.
215
4.5.2
DAS
INTERFACE
UNARYOPERATOR T
.
218
4.6
PRAXISWISSEN:
DEFINITION
VON
LAMBDAS
.
219
5
JAVA-GRUNDLAGEN
.
221
5.1
DIE
KLASSE
OBJECT
.
221
5.1.1
DIE
METHODE
TOSTRING
()
.
223
5.1.2
DIE
METHODE
EQUALS
()
.
227
5.2
PRIMITIVE
TYPEN
UND
WRAPPER-KLASSEN
.
239
5.2.1
GRUNDLAGEN
.
240
5.2.2
KONVERTIERUNG
VON
WERTEN
.
247
5.2.3
WISSENSWERTES
ZU
AUTO-BOXING
UND
AUTO-UNBOXING
.
250
5.2.4
AUSGABE
UND
VERARBEITUNG
VON
ZAHLEN
.
253
5.3
STRINGVERARBEITUNG
.
256
5.3.1
DIE
KLASSE
STRING
.
257
5.3.2
DIE
KLASSEN
STRINGBUFFER
UND
STRINGBUILDER
.
261
5.3.3
AUSGABEN
MIT
FORMAT
()
UNDPRINTFO
.
264
5.3.4
DIE
METHODE
SPUET
()
UND
REGULAERE
AUSDRUECKE
.
265
5.3.5
OPTIMIERUNG
BEI
STRINGS
IN
JDK
9
.
270
5.3.6
NEUE
METHODEN
IN
DER
KLASSE
STRING
IN
JDK
11
.
270
5.4
VARIANTEN
INNERER
KLASSEN
.
272
5.5
EIN-
UND
AUSGABE
(I/O)
.
276
5.5.1
DATEIBEHANDLUNG
UND
DIE
KLASSE
FILE
.
276
5.5.2
EIN-
UND
AUSGABESTREAMS
IM
UEBERBLICK
.
280
5.5.3
ZEICHENCODIERUNGEN
BEI
DER
EIN-
UND
AUSGABE
.
283
5.5.4
SPEICHERN
UND
LADEN
VON
DATEN
UND
OBJEKTEN
.
285
5.5.5
DATEIVERARBEITUNG
MIT
DEM
NIO
.
293
5.5.6
NEUE
HILFSMETHODEN
IN
DER
KLASSE
FILES
IN
JDK
11
.
296
5.6
FEHLERBEHANDLUNG
.
298
5.6.1
EINSTIEG
IN
DIE
FEHLERBEHANDLUNG
.
298
5.6.2
CHECKED
EXCEPTIONS
UND
UNCHECKED
EXCEPTIONS
.
304
5.6.3
BESONDERHEITEN
BEIM
EXCEPTION
HANDLING
.
306
5.6.4
EXCEPTION
HANDLING
UND
RESSOURCENFREIGABE
.
310
5.6.5
ASSERTIONS
.
314
X
INHALTSVERZEICHNIS
5.7
WEITERE
NEUERUNGEN
IN
JDK
9,10
UND
11
.
318
5.7.1
ERWEITERUNG
DER
@DEPRECATED-ANNOTATION
IN
JDK
9
.
318
5.7.2
SYNTAXERWEITERUNG
VAR
IN
JDK
10
UND
11
.
319
5.7.3
VERSIONSVERARBEITUNG
MIT
JDK
9
UND
10
.
323
5.8
WEITERFUEHRENDE
LITERATUR
.
324
II
BAUSTEINE
STABILER
JAVA-APPLIKATIONEN
325
6
DAS
COLLECTIONS-FRAMEWORK
.
327
6.1
DATENSTRUKTUREN
UND
CONTAINERKLASSEN
.
327
6.1.1
WAHL
EINER
GEEIGNETEN
DATENSTRUKTUR
.
328
6.1.2
ARRAYS
.
330
6.1.3
DAS
INTERFACE
COLLECTION
.
332
6.1.4
DAS
INTERFACE
ITERATOR
.
334
6.1.5
LISTEN
UND
DAS
INTERFACE
LIST
.
338
6.1.6
MENGEN
UND
DAS
INTERFACE
SET
.
346
6.1.7
GRUNDLAGEN
VON
HASHBASIERTEN
CONTAINERN
.
350
6.1.8
GRUNDLAGEN
AUTOMATISCH
SORTIERENDER
CONTAINER
.
359
6.1.9
DIE
METHODEN
EQUALS
(),
HASHCODE
()
UND
COMPARELO
()
IM
ZUSAMMENSPIEL
.
367
6.1.10
SCHLUESSEL-WERT-ABBILDUNGEN
UND
DAS
INTERFACE
MAP
.
369
6.1.11
ERWEITERUNGEN
AM
BEISPIEL
DER
KLASSE
HASHMAP
.
378
6.1.12
ERWEITERUNGEN
IM
INTERFACE
MAP
IN
JDK
8
.
381
6.1.13
COLLECTION-FACTORY-METHODEN
IN
JDK
9
.
386
6.1.14
UNVERAENDERLICHE
KOPIEN
VON
COLLECTIONS
MIT
JAVA
10
.
390
6.1.15
ENTSCHEIDUNGSHILFE
ZUR
WAHL
VON
DATENSTRUKTUREN
.
392
6.2
SUCHEN
UND
SORTIEREN
.
393
6.2.1
SUCHEN
.
393
6.2.2
SORTIEREN
VON
ARRAYS
UND
LISTEN
.
396
6.2.3
SORTIEREN
MIT
KOMPARATOREN
.
399
6.2.4
ERWEITERUNGEN
IM
INTERFACE
COMPARATOR
MIT
JDK
8
.
401
6.3
UTILITY-KLASSEN
UND
HILFSMETHODEN
.
406
6.3.1
NUETZLICHE
HILFSMETHODEN
.
406
6.3.2
DEKORIERER
SYNCHRONIZED
UND
UNMODIF
IABLE
.
411
6.3.3
VORDEFINIERTE
ALGORITHMEN
IN
DER
KLASSE
COLLECTIONS
.
415
6.4
CONTAINERKLASSEN:
GENERICS
UND
VARIANZ
.
417
6.5
DIE
KLASSE
OPTIONAL T
.
431
6.5.1
GRUNDLAGEN
ZUR
KLASSE
OPTIONAL
.
432
6.5.2
WEITERFUEHRENDES
BEISPIEL
UND
DISKUSSION
.
436
6.5.3
VERKETTETE
METHODENAUFRUFE
.
438
6.5.4
ERWEITERUNGEN
IN
DER
KLASSE
OPTIONAL T
IN
JDK
9
.
439
6.5.5
ERWEITERUNG
IN
OPTIONAL T
IN
JDK
10
UND
11
.
442
INHALTSVERZEICHNIS
XI
6.6 FALLSTRICKE
IM
COLLECTIONS-FRAMEWORK
.
443
6.6.1
WISSENSWERTES
ZU
ARRAYS
.
443
6.6.2
WISSENSWERTES
ZU
STACK,
QUEUE
UND
DEQUE
.
447
6.7
WEITERFUEHRENDE
LITERATUR
.
450
7
DAS
STREAM-API
.
453
7.1
GRUNDLAGEN
ZU
STREAMS
.
453
7.1.1
STREAMS
ERZEUGEN
-
CREATE
OPERATIONS
.
454
7.1.2
INTERMEDIATE
UND
TERMINAL
OPERATIONS
IM
UEBERBLICK
.
456
7.1.3
ZUSTANDSLOSE
INTERMEDIATE
OPERATIONS
.
458
7.1.4
ZUSTANDSBEHAFTETE
INTERMEDIATE
OPERATIONS
.
465
7.1.5
TERMINAL
OPERATIONS
.
467
7.1.6
WISSENSWERTES
ZUR
PARALLELVERARBEITUNG
.
476
7.1.7
NEUERUNGEN
IM
STREAM-API
IN
JDK
9
.
481
7.1.8
NEUERUNGEN
IM
STREAM-API
IN
JDK
10
.
484
7.2
FILTER-MAP-REDUCE
.
485
7.2.1
HERKOEMMLICHE
REALISIERUNG
.
486
7.2.2
FILTER-MAP-REDUCE
MIT
JDK
8
.
488
7.3
PRAXISBEISPIELE
.
490
7.3.1
AUFBEREITEN
VON
GRUPPIERUNGEN
UND
HISTOGRAMMEN
.
491
7.3.2
MAPS
NACH
WERT
SORTIEREN
.
492
8
DATUMSVERARBEITUNG
SEIT
JDK
8
.
497
8.1
UEBERBLICK
UEBER
DIE
NEU
EINGEFUEHRTEN
TYPEN
.
497
8.1.1
NEUE
AUFZAEHLUNGEN,
KLASSEN
UND
INTERFACES
.
498
8.1.2
DIE
AUFZAEHLUNGEN
DAYOFWEEK
UND
MONTH
.
500
8.1.3
DIE
KLASSEN
MONTHDAY,
YEARMONTH
UND
YEAR
.
500
8.1.4
DIE
KLASSE
INSTANT
.
501
8.1.5
DIE
KLASSE
DURATION
.
502
8.1.6
DIE
AUFZAEHLUNG
CHRONOUNIT
.
506
8.1.7
DIE
KLASSEN
LOCALDATE,
LOCALTIME
UND
LOCALDATETIME
507
8.1.8
DIE
KLASSE
PERIOD
.
510
8.1.9
DIE
KLASSE
ZONEDDATETIME
.
511
8.1.10
ZEITZONEN
UND
DIE
KLASSEN
ZONEID
UND
ZONEOFFSET
.
512
8.1.11
DIE
KLASSE
CLOCK
.
514
8.1.12
FORMATIERUNG
UND
PARSING
.
516
8.2
DATUMSARITHMETIK
.
517
8.2.1
EINSTIEG
IN
DIE
DATUMSARITHMETIK
.
517
8.2.2
REAL-WORLD-EXAMPLE:
GEHALTSZAHLTAG
.
522
8.3
INTEROPERABILITAET
MIT
LEGACY-CODE
.
526
XII
INHALTSVERZEICHNIS
9
APPLIKATIONSBAUSTEINE
.
529
9.1
EINSATZ
VON
BIBLIOTHEKEN
.
530
9.2
GOOGLE
GUAVA
IM
KURZUEBERBLICK
.
533
9.2.1
STRING-AKTIONEN
.
534
9.2.2
STRINGKONKATENATION
UND
-EXTRAKTION
.
535
9.2.3
ERWEITERUNGEN
FUER
COLLECTIONS
.
540
9.2.4
WEITERE
UTILITY-FUNKTIONALITAETEN
.
544
9.3
WERTEBEREICHS-
UND
PARAMETERPRUEFUNGEN
.
548
9.4
LOGGING-FRAMEWORKS
.
551
9.4.1
APACHE
IOG4J2
.
552
9.4.2
TIPPS
UND
TRICKS
ZUM
EINSATZ
VON
LOGGING
MIT
IOG4J2
.
556
9.5
KONFIGURATIONSPARAMETER
UND
-DATEIEN
.
561
9.5.1
EINLESEN
VON
KOMMANDOZEILENPARAMETERN
.
561
9.5.2
VERARBEITUNG
VON
PROPERTIES
.
569
9.5.3
WEITERE
MOEGLICHKEITEN
ZUR
KONFIGURATIONSVERWALTUNG
.
575
10
NLULTITHREADING-GRUNDLAGEN
.
581
10.1
THREADS
UND
RUNNABLES
.
583
10.1.1
DEFINITION
DER
AUSZUFUEHRENDEN
AUFGABE
.
583
10.1.2
START,
AUSFUEHRUNG
UND
ENDE
VON
THREADS
.
584
10.1.3
LEBENSZYKLUS
VON
THREADS
UND
THREAD-ZUSTAENDE
.
588
10.1.4
UNTERBRECHUNGSWUENSCHE
DURCH
AUFRUF
VON
INTERRUPT
()
.591
10.2
ZUSAMMENARBEIT
VON
THREADS
.
594
10.2.1
KONKURRIERENDE
DATENZUGRIFFE
.
594
10.2.2
LOCKS,
MONITORE
UND
KRITISCHE
BEREICHE
.
595
10.2.3
DEADLOCKS
UND
STARVATION
.
602
10.2.4
KRITISCHE
BEREICHE
UND
DAS
INTERFACE
LOCK
.
604
10.3
KOMMUNIKATION
VON
THREADS
.
606
10.3.1
KOMMUNIKATION
MIT
SYNCHRONISATION
.
606
10.3.2
KOMMUNIKATION
UEBER
DIE
METHODEN
WAIT(),
NOTIFYO
UND
NOTIFYALL
()
.
610
10.3.3
ABSTIMMUNG
VON
THREADS
.
615
10.3.4
UNERWARTETE
ILLEGALMONITORSTATEEXCEPTIONS
.
617
10.4
DAS
JAVA-MEMORY-MODELL
.
619
10.4.1
SICHTBARKEIT
.
619
10.4.2
ATOMARITAET
.
620
10.4.3
REORDERINGS
.
622
10.5
BESONDERHEITEN
BEI
THREADS
.
626
10.5.1
VERSCHIEDENE
ARTEN
VON
THREADS
.
626
10.5.2
EXCEPTIONS
IN
THREADS
.
627
10.5.3
SICHERES
BEENDEN
VON
THREADS
.
628
10.6
WEITERFUEHRENDE
LITERATUR
.
632
INHALTSVERZEICHNIS
XIII
11
MODERN
CONCURRENCY
.
633
11.1
CONCURRENT
COLLECTIONS
.
634
11.1.1
THREAD-SICHERHEIT
UND
PARALLELITAET
MIT
NORMALEN
COLLECTI
ONS
.
634
11.1.2
PARALLELITAET
MIT
DEN
CONCURRENT
COLLECTIONS
.
636
11.1.3
BLOCKIERENDE
WARTESCHLANGEN
UND
DAS
INTERFACE
BLOCKING-
QUEUE E
.
639
11.2
DAS
EXECUTOR-FRAMEWORK
.
642
11.2.1
EINFUEHRUNG
.
642
11.2.2
DEFINITION
VON
AUFGABEN
.
645
11.2.3
PARALLELE
ABARBEITUNG
IM
EXECUTORSERVICE
.
649
11.3
DAS
FORK-JOIN-FRAMEWORK
.
652
11.3.1
EINFUEHRENDES
BEISPIEL
.
653
11.3.2
REAL-WORLD-EXAMPLE:
MERGE
SORT
.
656
11.4
DIE
KLASSE
COMPLETABLEFUTURE T
.
659
11.4.1
EINFUEHRUNG
.
659
11.4.2
BEISPIEL:
PARALLELE
VERARBEITUNG
VON
DATEIINHALTEN
.
662
11.4.3
ERWEITERUNGEN
IN
JDK
9
.
665
11.4.4
BEISPIEL:
VON
SYNCHRON
ZU
MUTLITHREADED
.
667
11.5
REACTIVE
STREAMS
UND
DIE
KLASSE
FLOW
.
670
11.5.1
SCHNELLEINSTIEG
REACTIVE
STREAMS
.
670
11.5.2
REACTIVE
STREAMS
IM
JDK
.
671
11.5.3
BEISPIEL
ZUR
KLASSE
FLOW
.
675
11.5.4
FAZIT
.
679
11.6
WEITERFUEHRENDE
LITERATUR
.
680
12
FORTGESCHRITTENE
JAVA-THEMEN
.
681
12.1
CRASHKURS
REFLECTION
.
681
12.1.1
GRUNDLAGEN
.
683
12.1.2
ZUGRIFF
AUF
METHODEN
UND
ATTRIBUTE
.
686
12.1.3
SPEZIALFAELLE
.
691
12.1.4
TYPE
ERASURE
UND
TYPINFORMATIONEN
BEI
GENERICS
.
697
12.1.5
FAZIT
.
699
12.2
ANNOTATIONS
.
699
12.2.1
EINFUEHRUNG
IN
ANNOTATIONS
.
700
12.2.2
STANDARD-ANNOTATIONS
DES
JDKS
.
701
12.2.3
DEFINITION
EIGENER
ANNOTATIONS
.
703
12.2.4
ANNOTATIONS
ZUR
LAUFZEIT
AUSLESEN
.
706
12.3
SERIALISIERUNG
.
708
12.3.1
GRUNDLAGEN
DER
SERIALISIERUNG
.
708
12.3.2
DIE
SERIALISIERUNG
ANPASSEN
.
713
12.3.3
VERSIONSVERWALTUNG
DER
SERIALISIERUNG
.
716
12.3.4
OPTIMIERUNG
DER
SERIALISIERUNG
.
720
XIV
INHALTSVERZEICHNIS
12.4
GARBAGE
COLLECTION
.
725
12.4.1
GRUNDLAGEN
ZUR
GARBAGE
COLLECTION
.
725
12.4.2
DER
GARBAGE
COLLECTOR
G1
.
727
12.5
DYNAMIC
PROXIES
.
728
12.5.1
STATISCHER
PROXY
.
730
12.5.2
DYNAMISCHER
PROXY
.
732
12.6
HTTP/2-API
.
737
12.6.1
EINFUEHRUNG
.
737
12.6.2
REAL-WORLD-EXAMPLE:
WECHSELKURS
MIT
REST
.
740
12.6.3
FAZIT
.
742
12.7
WEITERFUEHRENDE
LITERATUR
.
742
13
BASISWISSEN
INTERNATIONALISIERUNG
.
743
13.1
INTERNATIONALISIERUNG
IM
UEBERBLICK
.
743
13.1.1
GRUNDLAGEN
UND
NORMEN
.
744
13.1.2
DIE
KLASSE
LOCALE
.
745
13.1.3
DIE
KLASSE
PROPERTYRESOURCEBUNDLE
.
749
13.1.4
FORMATIERTE
EIN-
UND
AUSGABE
.
752
13.1.5
DATUMSWERTE
UND
DIE
KLASSE
DATEFORMAT
.
753
13.1.6
ZAHLEN
UND
DIE
KLASSE
NUMBERFORMAT
.
754
13.1.7
TEXTMELDUNGEN
UND
DIE
KLASSE
MESSAGEFORMAT
.
757
13.1.8
STRINGVERGLEICHE
MIT
DER
KLASSE
COLLATOR
.
759
13.2
PROGRAMMBAUSTEINE
ZUR
INTERNATIONALISIERUNG
.
764
13.2.1
UNTERSTUETZUNG
MEHRERER
DATUMSFORMATE
.
765
13.2.2
FAZIT
UND
AUSBLICK
.
770
III
WICHTIGE
NEUERUNGEN
IN
JAVA
12
BIS
15
771
14
NEUES
UND
AENDERUNGEN
IN
DEN
JAVA-VERSIONEN
12
BIS
15
.
773
14.1
SYNTAXNEUERUNGEN
.
774
14.1.1
TEXT
BLOCKS
.
774
14.1.2
SWITCH
EXPRESSIONS
.
779
14.1.3
RECORDS
(PREVIEW)
.
786
14.1.4
PATTERN
MATCHING
BEI
INSTANCEOF
(PREVIEW)
.
793
14.1.5
SEALED
TYPES
(PREVIEW)
.
795
14.1.6
LOKALE
ENUMS
UND
INTERFACES
(PREVIEW)
.
797
14.2
API-NEUERUNGEN
.
798
14.2.1
NEUE
METHODEN
IN
DER
KLASSE
STRING
.
798
14.2.2 NEUE
HILFSMETHODE
IN
DER
UTILITY-KLASSE
FILES
.
801
14.2.3 DER
TEEING
()
-KOLLEKTOR
.
802
INHALTSVERZEICHNIS
XV
14.3
JVM-NEUERUNGEN
.
805
14.3.1
VERBESSERUNG
BEI
NULLPOINTEREXCEPTIONS
.
805
14.3.2
ENTFERNUNG
DER
JAVASCRIPT-ENGINE
.
808
14.4
MICROBENCHMARKSUITE
.
808
14.4.1
EIGENE
MICROBENCHMARKS
UND
VARIANTEN
DAVON
.
808
14.4.2
MICROBENCHMARKS
MIT
JMH
.
811
14.4.3
FAZIT
ZU
JMH
.
817
14.5
JAVA
15
-
NOTWENDIGE
ANPASSUNGEN
FUER
BUILD-TOOLS
UND
IDES
.
818
14.5.1
JAVA
15
MIT
GRADLE
.
818
14.5.2 JAVA
15
MIT
MAVEN
.
819
14.5.3 JAVA
15
MIT
ECLIPSE
.
820
14.5.4 JAVA
15
MIT
INTELLIJ
.
821
14.5.5
JAVA
15
MIT
JSHELL
ODER
DER
KOMMANDOZEILE
.
821
14.6
FAZIT
.
822
IV
MODULARISIERUNG
823
15
MODULARISIERUNG
MIT
PROJECT
JIGSAW
.
825
15.1
GRUNDLAGEN
.
826
15.1.1
BEGRIFFLICHKEITEN
.
826
15.1.2
ZIELE
VON
PROJECT
JIGSAW
.
827
15.2
MODULARISIERUNG
IM
UEBERBLICK
.
828
15.2.1
GRUNDLAGEN
ZU
PROJECT
JIGSAW
.
828
15.2.2
BEISPIEL
MIT
ZWEI
MODULEN
.
834
15.2.3
PACKAGING
.
843
15.2.4
ABHAENGIGKEITEN
UND
MODULGRAPHEN
.
845
15.2.5
MODULE
DES
JDKS
EINBINDEN
.
847
15.2.6
ARTEN
VON
MODULEN
.
853
15.3
SICHTBARKEITEN
UND
ZUGRIFFSSCHUTZ
.
854
15.3.1
SICHTBARKEITEN
.
854
15.3.2
ZUGRIFFSSCHUTZ
UND
REFLECTION
.
856
15.4
EMPFEHLENSWERTES
VERZEICHNISLAYOUT
FUER
MODULE
.
858
15.5
KOMPATIBILITAET
UND
MIGRATION
.
860
15.5.1
KOMPATIBILITAETSMODUS
.
860
15.5.2
MIGRATIONSSZENARIEN
.
863
15.5.3
FALLSTRICK
BEI
DER
BOTTOM-UP-MIGRATION
.
867
15.5.4
BEISPIEL:
MIGRATION
MIT
AUTOMATIC
MODULES
.
868
15.5.5
BEISPIEL:
AUTOMATIC
UND
UNNAMED
MODULE
.
870
15.5.6
BEISPIEL:
ABWANDLUNG
MIT
ZWEI
AUTOMATIC
MODULES
.
873
15.5.7
FAZIT
.
875
15.6
ZUSAMMENFASSUNG
.
876
XVI
INHALTSVERZEICHNIS
V
FALLSTRICKE
UND
LOESUNGEN
IM
PRAXISAILTAG
877
16
BADSMELLS
.
879
16.1
PROGRAMMDESIGN
.
881
16.1.1
BAD
SMELL:
VERWENDEN
VON
MAGIE
NUMBERS
.
881
16.1.2
BAD
SMELL:
KONSTANTEN
IN
INTERFACES
DEFINIEREN
.
882
16.1.3
BAD
SMELL:
ZUSAMMENGEHOERENDE
KONSTANTEN
NICHT
ALS
TYP
DEFINIERT
.
884
16.1.4
BAD
SMELL:
CASTS
AUF
UNBEKANNTE
SUBTYPEN
.
886
16.1.5
BAD
SMELL:
PROGRAMMCODE
IM
LOGGING-CODE
.
888
16.1.6
BAD
SMELL:
DOMINANTER
LOGGING-CODE
.
889
16.1.7
BAD
SMELL:
UNVOLLSTAENDIGE
AENDERUNGEN
NACH
COPY-PASTE
.
890
16.1.8
BAD
SMELL:
UNVOLLSTAENDIGE
BETRACHTUNG
ALLER
ALTERNATIVEN
.
892
16.1.9
BAD
SMELL:
PRAE-/POSTINKREMENT
IN
KOMPLEXEREN
STATEMENTS
893
16.1.10
BAD
SMELL:
MEHRERE
AUFEINANDERFOLGENDE
PARAMETER
GLEI
CHEN
TYPS
.
896
16.1.11
BAD
SMELL:
GRUNDLOSER
EINSATZ
VON
REFLECTION
.
897
16.1.12
BAD
SMELL:
SYSTEM.EXIT
()
MITTEN
IM
PROGRAMM
.
898
16.1.13
BAD
SMELL:
VARIABLENDEKIARATION
NICHT
IM
KLEINSTMOEGLICHEN
SICHTBARKEITSBEREICH
.
900
16.2
KLASSENDESIGN
.
902
16.2.1
BAD
SMELL:
UNNOETIGERWEISE
VERAENDERLICHE
ATTRIBUTE
.
902
16.2.2
BAD
SMELL:
HERAUSGABE
VON
THIS
IM
KONSTRUKTOR
.
904
16.2.3
BAD
SMELL:
AUFRUF
ABSTRAKTER
METHODEN
IM
KONSTRUKTOR
.
905
16.2.4
BAD
SMELL:
MIX
ABSTRAKTER
UND
KONKRETER
BASISKLASSEN
.
910
16.2.5
BAD
SMELL:
REFERENZIERUNG
VON
SUBKLASSEN
IN
BASISKLASSEN
912
16.2.6
BAD
SMELL:
OEFFENTLICHER
DEFAULTKONSTRUKTOR
LEDIGLICH
ZUM
ZU
GRIFF
AUF
HILFSMETHODEN
.
914
16.3
FEHLERBEHANDLUNG
UND
EXCEPTION
HANDLING
.
915
16.3.1
BAD
SMELL:
UNBEHANDELTE
EXCEPTION
.
915
16.3.2
BAD
SMELL:
UNPASSENDER
EXCEPTION-TYP
.
917
16.3.3
BAD
SMELL:
FANGEN
DER
ALLGEMEINSTEN
EXCEPTION
.
918
16.3.4
BAD
SMELL:
EXCEPTIONS
ZUR
STEUERUNG
DES
KONTROLLFLUSSES
.
920
16.3.5
BAD
SMELL:
UNBEDACHTE
RUECKGABE
VON
NULL
.
922
16.3.6
BAD
SMELL:
RUECKGABE
VON
NULL
STATT
EXCEPTION
IM
FEHLERFALL
924
16.3.7
BAD
SMELL:
SONDERBEHANDLUNG
VON
RANDFAELLEN
.
926
16.3.8
BAD
SMELL:
KEINE
GUELTIGKEITSPRUEFUNG
VON
EINGABEPARAMETERN
927
16.3.9
BAD
SMELL:
FEHLERHAFTE
FEHLERBEHANDLUNG
.
929
16.3.10
BAD
SMELL:
I/O
OHNE
FINALLY
ODER
ARM
.
931
16.3.11
BAD
SMELL:
RESOURCE
LEAKS
DURCH
EXCEPTIONS
IM
KONSTRUKTOR
932
16.4
HAEUFIGE
FALLSTRICKE
.
937
16.5
WEITERFUEHRENDE
LITERATUR
.
952
INHALTSVERZEICHNIS
XVII
17
REFACTORINGS
.
953
17.1
REFACTORINGS
AM
BEISPIEL
.
954
17.2
DAS
STANDARDVORGEHEN
.
962
17.3
KOMBINATION
VON
BASIS-REFACTORINGS
.
965
17.3.1
REFACTORING-BEISPIEL:
AUSGANGSLAGE
UND
ZIEL
.
965
17.3.2
AUFLOESEN
DER
ABHAENGIGKEITEN
.
967
17.3.3
VEREINFACHUNGEN
.
974
17.3.4
VERLAGERN
VON
FUNKTIONALITAET
.
978
17.4
DER
REFACTORING-KATALOG
.
979
17.4.1
REDUZIERE
DIE
SICHTBARKEIT
VON
ATTRIBUTEN
.
979
17.4.2
MINIMIERE
VERAENDERLICHE
ATTRIBUTE
.
982
17.4.3
REDUZIERE
DIE
SICHTBARKEIT
VON
METHODEN
.
986
17.4.4
ERSETZE
MUTATOR-
DURCH
BUSINESS-METHODE
.
988
17.4.5
MINIMIEREZUSTANDSAENDERUNGEN
.
989
17.4.6
FUEHRE
EIN
INTERFACE
EIN
.
989
17.4.7
SPALTE
EIN
INTERFACE
AUF
.
990
17.4.8
FUEHRE
EIN
READ-ONLY-INTERFACE
EIN
.
991
17.4.9
FUEHRE
EIN
READ-WRITE-INTERFACE
EIN
.
992
17.4.10
LAGERE
FUNKTIONALITAET
IN
HILFSMETHODEN
AUS
.
993
17.4.11
TRENNE
INFORMATIONSBESCHAFFUNG
UND
-VERARBEITUNG
.
995
17.4.12
WANDLE
KONSTANTENSAMMLUNG
IN
ENUM
UM
.
1002
17.4.13
ENTFERNE
EXCEPTIONS
ZUR
STEUERUNG
DES
KONTROLLFLUSSES
.
1004
17.4.14
WANDLE
IN
UTILITY-KLASSE
MIT
STATISCHEN
HILFSMETHODEN
UM
.
1007
17.4.15
LOESE
IF-ELSE
/
INSTANCEOF
DURCH
POLYMORPHIE
AUF
.
1010
17.5
DEFENSIVES
PROGRAMMIEREN
.
1013
17.5.1
FUEHRE
EINE
ZUSTANDSPRUEFUNG
EIN
.
1013
17.5.2
UEBERPRUEFE
EINGABEPARAMETER
.
1014
17.6
FALLSTRICKE
BEI
REFACTORINGS
.
1019
17.7
WEITERFUEHRENDE
LITERATUR
.
1021
18
ENTWURFSMUSTER
.
1023
18.1
ERZEUGUNGSMUSTER
.
1026
18.1.1
ERZEUGUNGSMETHODE
.
1026
18.1.2
FABRIKMETHODE
(FACTORY
METHOD)
.
1029
18.1.3
ERBAUER
(BUILDER)
.
1032
18.1.4
SINGLETON
.
1035
18.1.5
PROTOTYP
(PROTOTYPE)
.
1040
18.2
STRUKTURMUSTER
.
1044
18.2.1
FASSADE
(FAPADE)
.
1044
18.2.2
ADAPTER
.
1047
18.2.3
DEKORIERER
(DECORATOR)
.
1049
18.2.4
KOMPOSITUM
(COMPOSITE)
.
1052
XVIII
INHALTSVERZEICHNIS
18.3
VERHALTENSMUSTER
.
1056
18.3.1
ITERATOR
.
1056
18.3.2
NULL-OBJEKT
(NULL
OBJECT)
.
1058
18.3.3
SCHABLONENMETHODE
(TEMPLATE
METHOD)
.
1061
18.3.4
STRATEGIE
(STRATEGY)
.
1065
18.3.5 BEFEHL
(COMMAND)
.
1077
18.3.6
PROXY
.
1084
18.3.7
BEOBACHTER
(OBSERVER)
.
1086
18.3.8
MVC-ARCHITEKTUR
.
1095
18.4
WEITERFUEHRENDE
LITERATUR
.
1097
VI
QUALITAETSSICHERUNGSMASSNAHMEN
1099
19
PROGRAMMIERSTIL
UND
CODING
CONVENTIONS
.
1101
19.1
GRUNDREGELN
EINES
GUTEN
PROGRAMMIERSTILS
.
1101
19.1.1
KEEP
IT
HUMAN-READABLE
.
1102
19.1.2 KEEP
IT
SIMPLE
AND
SHORT
(KISS)
.
1102
19.1.3 KEEP
IT
NATURAL
.
1102
19.1.4 KEEP
IT
CLEAN
.
1103
19.2
DIE
PSYCHOLOGIE
BEIM
SOURCECODE-LAYOUT
.
1103
19.2.1
GESETZ
DER
AEHNLICHKEIT
.
1103
19.2.2
GESETZ
DER
NAEHE
.
1105
19.3
CODING
CONVENTIONS
.
1106
19.3.1
GRUNDLEGENDE
NAMENS-UND
FORMATIERUNGSREGELN
.
1107
19.3.2
NAMENSGEBUNG
.
1110
19.3.3
DOKUMENTATION
.
1113
19.3.4
PROGRAMMDESIGN
.
1115
19.3.5
KLASSENDESIGN
.
1120
19.3.6
PARAMETERLISTEN
.
1124
19.3.7
LOGIK
UND
KONTROLLFLUSS
.
1125
19.4
SOURCECODE-PRUEFUNG
MIT
TOOLS
.
1128
19.4.1
METRIKEN
.
1129
19.4.2
SOURCECODE-PRUEFUNG
IM
BUILD-PROZESS
.
1133
20
UNIT
TESTS
.1143
20.1
TESTEN
IM
UEBERBLICK
.
1143
20.1.1
WAS
VERSTEHT
MAN
UNTER
TESTEN?
.
1143
20.1.2
TESTARTEN
IM
UEBERBLICK
.
1144
20.1.3
ZUSTAENDIGKEITEN
BEIM
TESTEN
.
1147
20.1.4
TESTEN
UND
QUALITAET
.
1150
20.2
WISSENSWERTES
ZU
TESTFAELLEN
.
1154
20.2.1
TESTFAELLE
MIT
JUNIT
DEFINIEREN
.
1154
INHALTSVERZEICHNIS
XIX
20.2.2
PROBLEM
DER
KOMBINATORIK
BEIM
BESTIMMEN
VON
TESTFAELLEN
.1163
20.3
BESONDERE
ASSERTIONS
UND
ANNOTATIONS
1171
20.4
PARAMETRIERTE
TESTS
MIT
JUNIT
5
1182
20.4.1
EINSTIEG
1182
20.4.2
VERBESSERUNG
DES
TESTS
DER
RABATTBERECHNUNG
1189
20.4.3
PRAXISBEISPIEL:
BERECHNUNG
IN
TESTFALL
VEREINFACHEN
1191
20.4.4
PRAXIS-TRICKKISTE
.
1194
20.5
FORTGESCHRITTENE
UNIT-TEST-TECHNIKEN
1201
20.5.1
STELLVERTRETEROBJEKTE
/
TEST-DOUBLES
1204
20.5.2
VORARBEITEN
FUER
DAS
TESTEN
MIT
STUBS
UND
MOCKS
1208
20.5.3
DIE
TECHNIK
E
XTRACT
AND
O
VERRIDE
1210
20.5.4
EINSTIEG
IN
DAS
TESTEN
MIT
MOCKS
UND
MOCKITO
1217
20.5.5
ABHAENGIGKEITEN
MIT
MOCKITO
AUFLOESEN
1226
20.5.6
UNIT
TESTS
VON
PRIVATEN
METHODEN
1228
20.6
TESTSMELLS
1230
20.6.1
TEST
SMELL:
UNANGEBRACHTES
ASSERTTRUE
()
UNDASSERT-
FALSE
()
1230
20.6.2
TEST
SMELL:
ZU
VIELE
ASSERTS
IM
TESTFALL
1231
20.6.3
TEST
SMELL:
ASSERTS
OHNE
HINWEIS
1233
20.6.4
TEST
SMELL:
EINSATZ
VON
TOSTRING
()
IN
ASSERTEQUALS
()
1234
20.6.5
TEST
SMELL:
UNIT
TESTS
ZUR
PRUEFUNG
VON
LAUFZEITEN
1235
20.7
NUETZLICHE
TOOLS
FUER
UNIT
TESTS
1237
20.7.1
HAMCREST
1237
20.7.2
ASSERTJ
1241
20.7.3
MOREUNIT
1246
20.7.4
INFINITEST
1247
20.7.5
JACOCO
1248
20.7.6
ECLEMMA
1252
20.8
UMSTIEG
VON
JUNIT
4
AUF
JUNIT
5
1254
20.8.1
ERWEITERUNG
IM
GRADLE-BUILD
FUER
JUNIT-5-TESTS
1254
20.8.2
VERAENDERUNGEN
IN
DEN
ANNOTATIONS
1254
20.8.3
ALTERNATIVEN
FUER
JUNIT
RULES
1256
20.8.4
VERAENDERUNGEN
BEI
PARAMETRIERTEN
TESTS
1260
20.8.5
ALTERNATIVE
ZUR
HAMCREST-INTEGRATION
IN
JUNIT
4
1261
20.9
FAZIT
1262
20.10WEITERFUEHRENDE
LITERATUR
1263
21
CODEREVIEWS
1265
21.1
DEFINITION
1265
21.2
PROBLEME
UND
TIPPS
ZUR
DURCHFUEHRUNG
1267
21.3
VORTEILE
VON
CODEREVIEWS
1269
21.4
CODEREVIEW-CHECKLISTE
1272
XX
INHALTSVERZEICHNIS
22
OPTIMIERUNGEN
.
1273
22.1
GRUNDLAGEN
.
1274
22.1.1
OPTIMIERUNGSEBENEN
UND
EINFLUSSFAKTOREN
.
1275
22.1.2
OPTIMIERUNGSTECHNIKEN
.
1276
22.1.3
CPU-BOUND-OPTIMIERUNGSEBENEN
AM
BEISPIEL
.
1278
22.1.4
MESSUNGEN
-
ERKENNEN
KRITISCHER
BEREICHE
.
1282
22.1.5
ABSCHAETZUNGEN
MIT
DER
O-NOTATION
.
1289
22.2
EINSATZ
GEEIGNETER
DATENSTRUKTUREN
.
1292
22.2.1
EINFLUSS
VON
ARRAYS
UND
LISTEN
.
1293
22.2.2
OPTIMIERUNGEN
FUER
SET
UND
MAP
.
1297
22.2.3
DESIGN
EINES
ZUGRIFFSINTERFACE
.
1299
22.3
LAZY
INITIALIZATION
.
1302
22.3.1
KONSEQUENZEN
DES
EINSATZES
DER
LAZY
INITIALIZATION
.
1305
22.3.2
LAZY
INITIALIZATION
MITHILFE
DES
PROXY-MUSTERS
.1307
22.4
OPTIMIERUNGEN
AM
BEISPIEL
.
1310
22.5
L/O-BOUND-OPTIMIERUNGEN
.
1318
22.5.1
TECHNIK
-
WAHL
PASSENDER
STRATEGIEN
.
1318
22.5.2
TECHNIK
-
CACHING
UND
POOLING
.
1321
22.5.3
TECHNIK
-
VERMEIDUNG
UNNOETIGER
AKTIONEN
.
1321
22.6
MEMORY-BOUND-OPTIMIERUNGEN
.
1325
22.6.1
TECHNIK
-
WAHL
PASSENDER
STRATEGIEN
.
1325
22.6.2
TECHNIK
-
CACHING
UND
POOLING
.
1326
22.6.3
OPTIMIERUNGENDERSTRINGVERARBEITUNG
.
1333
22.6.4
TECHNIK
-
VERMEIDUNG
UNNOETIGER
AKTIONEN
.
1336
22.7
CPU-BOUND-OPTIMIERUNGEN
.
1338
22.7.1
TECHNIK
-
WAHL
PASSENDER
STRATEGIEN
.
1339
22.7.2
TECHNIK
-
CACHING
UND
POOLING
.
1342
22.7.3
TECHNIK
-
VERMEIDUNG
UNNOETIGER
AKTIONEN
.
1344
22.8
WEITERFUEHRENDE
LITERATUR
.
1347
23
SCHLUSSGEDANKEN
.
1349
VII
ANHANG
1351
A
GRUNDLAGEN
ZUR
JAVA
VIRTUAL
MACHINE
.
1353
A.1
WISSENSWERTES
RUND
UM
DIE
JAVA
VIRTUAL
MACHINE
.
1353
A.1.1
AUSFUEHRUNG
EINES
JAVA-PROGRAMMS
.
1353
A.1.2
SPEICHERVERWALTUNG
UND
CLASSLOADING
.
1354
LITERATURVERZEICHNIS
.1357
INDEX
.
1361 |
adam_txt |
V
INHALTSUEBERSICHT
1
EINLEITUNG
1
I
JAVA-GRUNDLAGEN,
ANALYSE
UND
DESIGN
11
2
PROFESSIONELLE
ARBEITSUMGEBUNG
13
3
OBJEKTORIENTIERTES
DESIGN
85
4
LAMBDAS,
METHODENREFERENZEN
UND
DEFAULTMETHODEN
199
5
JAVA-GRUNDLAGEN
221
II
BAUSTEINE
STABILER
JAVA-APPLIKATIONEN
325
6
DAS
COLLECTIONS-FRAMEWORK
327
7
DAS
STREAM-API453
8
DATUMSVERARBEITUNG
SEIT
JDK
8
497
9
APPLIKATIONSBAUSTEINE
529
10
MULTITHREADING-GRUNDLAGEN
581
11
MODERN
CONCURRENCY
12
FORTGESCHRITTENE
JAVA-THEMEN
681
13
BASISWISSEN
INTERNATIONALISIERUNG
743
VI
INHALTSUEBERSICHT
III
WICHTIGE
NEUERUNGEN
IN
JAVA
12
BIS
15
771
14
NEUES
UND
AENDERUNGEN
IN
DEN
JAVA-VERSIONEN
12
BIS
15
.
773
IV
MODULARISIERUNG
823
15
MODULARISIERUNG
MIT
PROJECT
JIGSAW
.
825
V
FALLSTRICKE
UND
LOESUNGEN
IM
PRAXISALLTAG
877
16
BADSMELLS
.
879
17
REFACTORINGS
.
953
18
ENTWURFSMUSTER
.1023
VI
QUALITAETSSICHERUNGSMASSNAHMEN
1099
19
PROGRAMMIERSTIL
UND
CODING
CONVENTIONS
.
1101
20
UNIT
TESTS
.1143
21
CODEREVIEWS
.1265
22
OPTIMIERUNGEN
.1273
23
SCHLUSSGEDANKEN
.
1349
VII
ANHANG
1351
A
GRUNDLAGEN
ZUR
JAVA
VIRTUAL
MACHINE
.1353
LITERATURVERZEICHNIS
.
1357
INDEX
.
1361
VII
INHALTSVERZEICHNIS
1
EINLEITUNG
.
1
1.1
UEBER
DIESES
BUCH
.
1
1.1.1
MOTIVATION
.
1
1.1.2
WAS
LEISTET
DIESES
BUCH
UND
WAS
NICHT?
.
2
1.1.3
WIE
UND
WAS
SOLL
MITHILFE
DES
BUCHS
GELERNT
WERDEN?
.
2
1.1.4
WER
SOLLTE
DIESES
BUCH
LESEN?
.
4
1.2
AUFBAU
DES
BUCHS
.
4
1.3
KONVENTIONEN
UND
AUSFUEHRBARE
PROGRAMME
.
6
1
JAVA-GRUNDLAGEN,
ANALYSE
UND
DESIGN
11
2
PROFESSIONELLE
ARBEITSUMGEBUNG
.
13
2.1
VORTEILE
VON
IDES
AM
BEISPIEL
VON
ECLIPSE
.
14
2.2
PROJEKTORGANISATION
.
16
2.2.1
PROJEKTSTRUKTUR
IN
ECLIPSE
.
16
2.2.2
PROJEKTSTRUKTUR
FUER
MAVEN
UND
GRADLE
.
18
2.3 EINSATZ
VON
VERSIONSVERWALTUNGEN
.
20
2.3.1
ARBEITEN
MIT
ZENTRALEN
VERSIONSVERWALTUNGEN
.
23
2.3.2
DEZENTRALE
VERSIONSVERWALTUNGEN
.
28
2.3.3
VCS
UND
DVCS
IM
VERGLEICH
.
34
2.4
EINSATZ
EINES
UNIT-TEST-FRAMEWORKS
.
37
2.4.1
DAS
JUNIT-FRAMEWORK
.
37
2.4.2
PARAMETRIERTE
TESTS
MIT
JUNIT
5
.
43
2.4.3
VORTEILE
VON
UNIT
TESTS
.
45
2.5
DEBUGGING
.
46
2.5.1
FEHLERSUCHE
MIT
EINEM
DEBUGGER
.
47
2.5.2
REMOTE
DEBUGGING
.
50
2.6
DEPLOYMENT
VON
JAVA-APPLIKATIONEN
.
55
2.6.1
DAS
JAR-TOOL
IM
KURZUEBERBLICK
.
56
2.6.2
JAR
INSPIZIEREN
UND
AENDERN,
INHALT
EXTRAHIEREN
.
57
2.6.3
METAINFORMATIONEN
UND
DAS
MANIFEST
.
58
2.6.4
INSPIZIEREN
EINER
JAR-DATEI
.
60
VIII
INHALTSVERZEICHNIS
2.7
EINSATZ
EINES
IDE-UNABHAENGIGEN
BUILD-PROZESSES
.
63
2.7.1
MAVEN
IM
UEBERBLICK
.
65
2.7.2
BUILDS
MIT
GRADLE
.
70
2.7.3
VORTEILE
VON
MAVEN
UND
GRADLE
.
82
2.8
WEITERFUEHRENDE
LITERATUR
.
83
3
OBJEKTORIENTIERTES
DESIGN
.
85
3.1
OO-GRUNDLAGEN
.
86
3.1.1
GRUNDBEGRIFFE
.
86
3.1.2
BEISPIELENTWURF:
EIN
ZAEHLER
.
98
3.1.3
VOM
IMPERATIVEN
ZUM
OBJEKTORIENTIERTEN
ENTWURF
.
106
3.1.4
DISKUSSION
DER
OO-GRUNDGEDANKEN
.
111
3.1.5
WISSENSWERTES
ZUM
OBJEKTZUSTAND
.
114
3.2
GRUNDLEGENDE
OO-TECHNIKEN
.
123
3.2.1
SCHNITTSTELLEN
(INTERFACES)
.
123
3.2.2
BASISKLASSEN
UND
ABSTRAKTE
BASISKLASSEN
.
128
3.2.3
INTERFACES
UND
ABSTRAKTE
BASISKLASSEN
.
130
3.3
WISSENSWERTES
ZU
VERERBUNG
.
132
3.3.1
PROBLEME
DURCH
VERERBUNG
.
132
3.3.2
DELEGATION
STATT
VERERBUNG
.
138
3.4
FORTGESCHRITTENERE
OO-TECHNIKEN
.
142
3.4.1
READ-ONLY-INTERFACE
.
142
3.4.2
IMMUTABLE-KLASSE
.
148
3.4.3
MARKER-INTERFACE
.
153
3.4.4
KONSTANTENSAMMLUNGEN
UND
AUFZAEHLUNGEN
.
154
3.4.5
VALUE
OBJECT
(DATA
TRANSFER
OBJECT)
.
160
3.5
PRINZIPIEN
GUTEN
OO-DESIGNS
.
162
3.5.1
GEHEIMNISPRINZIP
NACH
PARNAS
.
163
3.5.2
LAW
OF
DEMETER
.
164
3.5.3
SOLID-PRINZIPIEN
.
167
3.6
FORMEN
DER
VARIANZ
.
178
3.6.1
GRUNDLAGEN
DER
VARIANZ
.
178
3.6.2
KOVARIANTE
RUECKGABEWERTE
.
182
3.7
GENERISCHE
TYPEN
(GENERICS)
.
184
3.7.1
EINFUEHRUNG
.
184
3.7.2
GENERICS
UND
AUSWIRKUNGEN
DER
TYPE
ERASURE
.
189
3.8
WEITERFUEHRENDE
LITERATUR
.
197
4
LAMBDAS,
METHODENREFERENZEN
UND
DEFAULTMETHODEN
.
199
4.1
EINSTIEG
IN
LAMBDAS
.
199
4.1.1
SYNTAX
VON
LAMBDAS
.
199
4.1.2
FUNCTIONAL
INTERFACES
UND
SAM-TYPEN
.
200
4.1.3
EXCEPTIONS
IN
LAMBDAS
.
204
INHALTSVERZEICHNIS
IX
4.2
SYNTAXERWEITERUNGEN
IN
INTERFACES
.
208
4.2.1
DEFAULTMETHODEN
.
208
4.2.2
STATISCHE
METHODEN
IN
INTERFACES
.
211
4.3
METHODENREFERENZEN
.
213
4.4
EXTERNE
VS.
INTERNE
ITERATION
.
214
4.5
WICHTIGE
FUNCTIONAL
INTERFACES
FUER
COLLECTIONS
.
215
4.5.1
DAS
INTERFACE
PREDICATE T
.
215
4.5.2
DAS
INTERFACE
UNARYOPERATOR T
.
218
4.6
PRAXISWISSEN:
DEFINITION
VON
LAMBDAS
.
219
5
JAVA-GRUNDLAGEN
.
221
5.1
DIE
KLASSE
OBJECT
.
221
5.1.1
DIE
METHODE
TOSTRING
()
.
223
5.1.2
DIE
METHODE
EQUALS
()
.
227
5.2
PRIMITIVE
TYPEN
UND
WRAPPER-KLASSEN
.
239
5.2.1
GRUNDLAGEN
.
240
5.2.2
KONVERTIERUNG
VON
WERTEN
.
247
5.2.3
WISSENSWERTES
ZU
AUTO-BOXING
UND
AUTO-UNBOXING
.
250
5.2.4
AUSGABE
UND
VERARBEITUNG
VON
ZAHLEN
.
253
5.3
STRINGVERARBEITUNG
.
256
5.3.1
DIE
KLASSE
STRING
.
257
5.3.2
DIE
KLASSEN
STRINGBUFFER
UND
STRINGBUILDER
.
261
5.3.3
AUSGABEN
MIT
FORMAT
()
UNDPRINTFO
.
264
5.3.4
DIE
METHODE
SPUET
()
UND
REGULAERE
AUSDRUECKE
.
265
5.3.5
OPTIMIERUNG
BEI
STRINGS
IN
JDK
9
.
270
5.3.6
NEUE
METHODEN
IN
DER
KLASSE
STRING
IN
JDK
11
.
270
5.4
VARIANTEN
INNERER
KLASSEN
.
272
5.5
EIN-
UND
AUSGABE
(I/O)
.
276
5.5.1
DATEIBEHANDLUNG
UND
DIE
KLASSE
FILE
.
276
5.5.2
EIN-
UND
AUSGABESTREAMS
IM
UEBERBLICK
.
280
5.5.3
ZEICHENCODIERUNGEN
BEI
DER
EIN-
UND
AUSGABE
.
283
5.5.4
SPEICHERN
UND
LADEN
VON
DATEN
UND
OBJEKTEN
.
285
5.5.5
DATEIVERARBEITUNG
MIT
DEM
NIO
.
293
5.5.6
NEUE
HILFSMETHODEN
IN
DER
KLASSE
FILES
IN
JDK
11
.
296
5.6
FEHLERBEHANDLUNG
.
298
5.6.1
EINSTIEG
IN
DIE
FEHLERBEHANDLUNG
.
298
5.6.2
CHECKED
EXCEPTIONS
UND
UNCHECKED
EXCEPTIONS
.
304
5.6.3
BESONDERHEITEN
BEIM
EXCEPTION
HANDLING
.
306
5.6.4
EXCEPTION
HANDLING
UND
RESSOURCENFREIGABE
.
310
5.6.5
ASSERTIONS
.
314
X
INHALTSVERZEICHNIS
5.7
WEITERE
NEUERUNGEN
IN
JDK
9,10
UND
11
.
318
5.7.1
ERWEITERUNG
DER
@DEPRECATED-ANNOTATION
IN
JDK
9
.
318
5.7.2
SYNTAXERWEITERUNG
VAR
IN
JDK
10
UND
11
.
319
5.7.3
VERSIONSVERARBEITUNG
MIT
JDK
9
UND
10
.
323
5.8
WEITERFUEHRENDE
LITERATUR
.
324
II
BAUSTEINE
STABILER
JAVA-APPLIKATIONEN
325
6
DAS
COLLECTIONS-FRAMEWORK
.
327
6.1
DATENSTRUKTUREN
UND
CONTAINERKLASSEN
.
327
6.1.1
WAHL
EINER
GEEIGNETEN
DATENSTRUKTUR
.
328
6.1.2
ARRAYS
.
330
6.1.3
DAS
INTERFACE
COLLECTION
.
332
6.1.4
DAS
INTERFACE
ITERATOR
.
334
6.1.5
LISTEN
UND
DAS
INTERFACE
LIST
.
338
6.1.6
MENGEN
UND
DAS
INTERFACE
SET
.
346
6.1.7
GRUNDLAGEN
VON
HASHBASIERTEN
CONTAINERN
.
350
6.1.8
GRUNDLAGEN
AUTOMATISCH
SORTIERENDER
CONTAINER
.
359
6.1.9
DIE
METHODEN
EQUALS
(),
HASHCODE
()
UND
COMPARELO
()
IM
ZUSAMMENSPIEL
.
367
6.1.10
SCHLUESSEL-WERT-ABBILDUNGEN
UND
DAS
INTERFACE
MAP
.
369
6.1.11
ERWEITERUNGEN
AM
BEISPIEL
DER
KLASSE
HASHMAP
.
378
6.1.12
ERWEITERUNGEN
IM
INTERFACE
MAP
IN
JDK
8
.
381
6.1.13
COLLECTION-FACTORY-METHODEN
IN
JDK
9
.
386
6.1.14
UNVERAENDERLICHE
KOPIEN
VON
COLLECTIONS
MIT
JAVA
10
.
390
6.1.15
ENTSCHEIDUNGSHILFE
ZUR
WAHL
VON
DATENSTRUKTUREN
.
392
6.2
SUCHEN
UND
SORTIEREN
.
393
6.2.1
SUCHEN
.
393
6.2.2
SORTIEREN
VON
ARRAYS
UND
LISTEN
.
396
6.2.3
SORTIEREN
MIT
KOMPARATOREN
.
399
6.2.4
ERWEITERUNGEN
IM
INTERFACE
COMPARATOR
MIT
JDK
8
.
401
6.3
UTILITY-KLASSEN
UND
HILFSMETHODEN
.
406
6.3.1
NUETZLICHE
HILFSMETHODEN
.
406
6.3.2
DEKORIERER
SYNCHRONIZED
UND
UNMODIF
IABLE
.
411
6.3.3
VORDEFINIERTE
ALGORITHMEN
IN
DER
KLASSE
COLLECTIONS
.
415
6.4
CONTAINERKLASSEN:
GENERICS
UND
VARIANZ
.
417
6.5
DIE
KLASSE
OPTIONAL T
.
431
6.5.1
GRUNDLAGEN
ZUR
KLASSE
OPTIONAL
.
432
6.5.2
WEITERFUEHRENDES
BEISPIEL
UND
DISKUSSION
.
436
6.5.3
VERKETTETE
METHODENAUFRUFE
.
438
6.5.4
ERWEITERUNGEN
IN
DER
KLASSE
OPTIONAL T
IN
JDK
9
.
439
6.5.5
ERWEITERUNG
IN
OPTIONAL T
IN
JDK
10
UND
11
.
442
INHALTSVERZEICHNIS
XI
6.6 FALLSTRICKE
IM
COLLECTIONS-FRAMEWORK
.
443
6.6.1
WISSENSWERTES
ZU
ARRAYS
.
443
6.6.2
WISSENSWERTES
ZU
STACK,
QUEUE
UND
DEQUE
.
447
6.7
WEITERFUEHRENDE
LITERATUR
.
450
7
DAS
STREAM-API
.
453
7.1
GRUNDLAGEN
ZU
STREAMS
.
453
7.1.1
STREAMS
ERZEUGEN
-
CREATE
OPERATIONS
.
454
7.1.2
INTERMEDIATE
UND
TERMINAL
OPERATIONS
IM
UEBERBLICK
.
456
7.1.3
ZUSTANDSLOSE
INTERMEDIATE
OPERATIONS
.
458
7.1.4
ZUSTANDSBEHAFTETE
INTERMEDIATE
OPERATIONS
.
465
7.1.5
TERMINAL
OPERATIONS
.
467
7.1.6
WISSENSWERTES
ZUR
PARALLELVERARBEITUNG
.
476
7.1.7
NEUERUNGEN
IM
STREAM-API
IN
JDK
9
.
481
7.1.8
NEUERUNGEN
IM
STREAM-API
IN
JDK
10
.
484
7.2
FILTER-MAP-REDUCE
.
485
7.2.1
HERKOEMMLICHE
REALISIERUNG
.
486
7.2.2
FILTER-MAP-REDUCE
MIT
JDK
8
.
488
7.3
PRAXISBEISPIELE
.
490
7.3.1
AUFBEREITEN
VON
GRUPPIERUNGEN
UND
HISTOGRAMMEN
.
491
7.3.2
MAPS
NACH
WERT
SORTIEREN
.
492
8
DATUMSVERARBEITUNG
SEIT
JDK
8
.
497
8.1
UEBERBLICK
UEBER
DIE
NEU
EINGEFUEHRTEN
TYPEN
.
497
8.1.1
NEUE
AUFZAEHLUNGEN,
KLASSEN
UND
INTERFACES
.
498
8.1.2
DIE
AUFZAEHLUNGEN
DAYOFWEEK
UND
MONTH
.
500
8.1.3
DIE
KLASSEN
MONTHDAY,
YEARMONTH
UND
YEAR
.
500
8.1.4
DIE
KLASSE
INSTANT
.
501
8.1.5
DIE
KLASSE
DURATION
.
502
8.1.6
DIE
AUFZAEHLUNG
CHRONOUNIT
.
506
8.1.7
DIE
KLASSEN
LOCALDATE,
LOCALTIME
UND
LOCALDATETIME
507
8.1.8
DIE
KLASSE
PERIOD
.
510
8.1.9
DIE
KLASSE
ZONEDDATETIME
.
511
8.1.10
ZEITZONEN
UND
DIE
KLASSEN
ZONEID
UND
ZONEOFFSET
.
512
8.1.11
DIE
KLASSE
CLOCK
.
514
8.1.12
FORMATIERUNG
UND
PARSING
.
516
8.2
DATUMSARITHMETIK
.
517
8.2.1
EINSTIEG
IN
DIE
DATUMSARITHMETIK
.
517
8.2.2
REAL-WORLD-EXAMPLE:
GEHALTSZAHLTAG
.
522
8.3
INTEROPERABILITAET
MIT
LEGACY-CODE
.
526
XII
INHALTSVERZEICHNIS
9
APPLIKATIONSBAUSTEINE
.
529
9.1
EINSATZ
VON
BIBLIOTHEKEN
.
530
9.2
GOOGLE
GUAVA
IM
KURZUEBERBLICK
.
533
9.2.1
STRING-AKTIONEN
.
534
9.2.2
STRINGKONKATENATION
UND
-EXTRAKTION
.
535
9.2.3
ERWEITERUNGEN
FUER
COLLECTIONS
.
540
9.2.4
WEITERE
UTILITY-FUNKTIONALITAETEN
.
544
9.3
WERTEBEREICHS-
UND
PARAMETERPRUEFUNGEN
.
548
9.4
LOGGING-FRAMEWORKS
.
551
9.4.1
APACHE
IOG4J2
.
552
9.4.2
TIPPS
UND
TRICKS
ZUM
EINSATZ
VON
LOGGING
MIT
IOG4J2
.
556
9.5
KONFIGURATIONSPARAMETER
UND
-DATEIEN
.
561
9.5.1
EINLESEN
VON
KOMMANDOZEILENPARAMETERN
.
561
9.5.2
VERARBEITUNG
VON
PROPERTIES
.
569
9.5.3
WEITERE
MOEGLICHKEITEN
ZUR
KONFIGURATIONSVERWALTUNG
.
575
10
NLULTITHREADING-GRUNDLAGEN
.
581
10.1
THREADS
UND
RUNNABLES
.
583
10.1.1
DEFINITION
DER
AUSZUFUEHRENDEN
AUFGABE
.
583
10.1.2
START,
AUSFUEHRUNG
UND
ENDE
VON
THREADS
.
584
10.1.3
LEBENSZYKLUS
VON
THREADS
UND
THREAD-ZUSTAENDE
.
588
10.1.4
UNTERBRECHUNGSWUENSCHE
DURCH
AUFRUF
VON
INTERRUPT
()
.591
10.2
ZUSAMMENARBEIT
VON
THREADS
.
594
10.2.1
KONKURRIERENDE
DATENZUGRIFFE
.
594
10.2.2
LOCKS,
MONITORE
UND
KRITISCHE
BEREICHE
.
595
10.2.3
DEADLOCKS
UND
STARVATION
.
602
10.2.4
KRITISCHE
BEREICHE
UND
DAS
INTERFACE
LOCK
.
604
10.3
KOMMUNIKATION
VON
THREADS
.
606
10.3.1
KOMMUNIKATION
MIT
SYNCHRONISATION
.
606
10.3.2
KOMMUNIKATION
UEBER
DIE
METHODEN
WAIT(),
NOTIFYO
UND
NOTIFYALL
()
.
610
10.3.3
ABSTIMMUNG
VON
THREADS
.
615
10.3.4
UNERWARTETE
ILLEGALMONITORSTATEEXCEPTIONS
.
617
10.4
DAS
JAVA-MEMORY-MODELL
.
619
10.4.1
SICHTBARKEIT
.
619
10.4.2
ATOMARITAET
.
620
10.4.3
REORDERINGS
.
622
10.5
BESONDERHEITEN
BEI
THREADS
.
626
10.5.1
VERSCHIEDENE
ARTEN
VON
THREADS
.
626
10.5.2
EXCEPTIONS
IN
THREADS
.
627
10.5.3
SICHERES
BEENDEN
VON
THREADS
.
628
10.6
WEITERFUEHRENDE
LITERATUR
.
632
INHALTSVERZEICHNIS
XIII
11
MODERN
CONCURRENCY
.
633
11.1
CONCURRENT
COLLECTIONS
.
634
11.1.1
THREAD-SICHERHEIT
UND
PARALLELITAET
MIT
NORMALEN
COLLECTI
ONS
.
634
11.1.2
PARALLELITAET
MIT
DEN
CONCURRENT
COLLECTIONS
.
636
11.1.3
BLOCKIERENDE
WARTESCHLANGEN
UND
DAS
INTERFACE
BLOCKING-
QUEUE E
.
639
11.2
DAS
EXECUTOR-FRAMEWORK
.
642
11.2.1
EINFUEHRUNG
.
642
11.2.2
DEFINITION
VON
AUFGABEN
.
645
11.2.3
PARALLELE
ABARBEITUNG
IM
EXECUTORSERVICE
.
649
11.3
DAS
FORK-JOIN-FRAMEWORK
.
652
11.3.1
EINFUEHRENDES
BEISPIEL
.
653
11.3.2
REAL-WORLD-EXAMPLE:
MERGE
SORT
.
656
11.4
DIE
KLASSE
COMPLETABLEFUTURE T
.
659
11.4.1
EINFUEHRUNG
.
659
11.4.2
BEISPIEL:
PARALLELE
VERARBEITUNG
VON
DATEIINHALTEN
.
662
11.4.3
ERWEITERUNGEN
IN
JDK
9
.
665
11.4.4
BEISPIEL:
VON
SYNCHRON
ZU
MUTLITHREADED
.
667
11.5
REACTIVE
STREAMS
UND
DIE
KLASSE
FLOW
.
670
11.5.1
SCHNELLEINSTIEG
REACTIVE
STREAMS
.
670
11.5.2
REACTIVE
STREAMS
IM
JDK
.
671
11.5.3
BEISPIEL
ZUR
KLASSE
FLOW
.
675
11.5.4
FAZIT
.
679
11.6
WEITERFUEHRENDE
LITERATUR
.
680
12
FORTGESCHRITTENE
JAVA-THEMEN
.
681
12.1
CRASHKURS
REFLECTION
.
681
12.1.1
GRUNDLAGEN
.
683
12.1.2
ZUGRIFF
AUF
METHODEN
UND
ATTRIBUTE
.
686
12.1.3
SPEZIALFAELLE
.
691
12.1.4
TYPE
ERASURE
UND
TYPINFORMATIONEN
BEI
GENERICS
.
697
12.1.5
FAZIT
.
699
12.2
ANNOTATIONS
.
699
12.2.1
EINFUEHRUNG
IN
ANNOTATIONS
.
700
12.2.2
STANDARD-ANNOTATIONS
DES
JDKS
.
701
12.2.3
DEFINITION
EIGENER
ANNOTATIONS
.
703
12.2.4
ANNOTATIONS
ZUR
LAUFZEIT
AUSLESEN
.
706
12.3
SERIALISIERUNG
.
708
12.3.1
GRUNDLAGEN
DER
SERIALISIERUNG
.
708
12.3.2
DIE
SERIALISIERUNG
ANPASSEN
.
713
12.3.3
VERSIONSVERWALTUNG
DER
SERIALISIERUNG
.
716
12.3.4
OPTIMIERUNG
DER
SERIALISIERUNG
.
720
XIV
INHALTSVERZEICHNIS
12.4
GARBAGE
COLLECTION
.
725
12.4.1
GRUNDLAGEN
ZUR
GARBAGE
COLLECTION
.
725
12.4.2
DER
GARBAGE
COLLECTOR
G1
.
727
12.5
DYNAMIC
PROXIES
.
728
12.5.1
STATISCHER
PROXY
.
730
12.5.2
DYNAMISCHER
PROXY
.
732
12.6
HTTP/2-API
.
737
12.6.1
EINFUEHRUNG
.
737
12.6.2
REAL-WORLD-EXAMPLE:
WECHSELKURS
MIT
REST
.
740
12.6.3
FAZIT
.
742
12.7
WEITERFUEHRENDE
LITERATUR
.
742
13
BASISWISSEN
INTERNATIONALISIERUNG
.
743
13.1
INTERNATIONALISIERUNG
IM
UEBERBLICK
.
743
13.1.1
GRUNDLAGEN
UND
NORMEN
.
744
13.1.2
DIE
KLASSE
LOCALE
.
745
13.1.3
DIE
KLASSE
PROPERTYRESOURCEBUNDLE
.
749
13.1.4
FORMATIERTE
EIN-
UND
AUSGABE
.
752
13.1.5
DATUMSWERTE
UND
DIE
KLASSE
DATEFORMAT
.
753
13.1.6
ZAHLEN
UND
DIE
KLASSE
NUMBERFORMAT
.
754
13.1.7
TEXTMELDUNGEN
UND
DIE
KLASSE
MESSAGEFORMAT
.
757
13.1.8
STRINGVERGLEICHE
MIT
DER
KLASSE
COLLATOR
.
759
13.2
PROGRAMMBAUSTEINE
ZUR
INTERNATIONALISIERUNG
.
764
13.2.1
UNTERSTUETZUNG
MEHRERER
DATUMSFORMATE
.
765
13.2.2
FAZIT
UND
AUSBLICK
.
770
III
WICHTIGE
NEUERUNGEN
IN
JAVA
12
BIS
15
771
14
NEUES
UND
AENDERUNGEN
IN
DEN
JAVA-VERSIONEN
12
BIS
15
.
773
14.1
SYNTAXNEUERUNGEN
.
774
14.1.1
TEXT
BLOCKS
.
774
14.1.2
SWITCH
EXPRESSIONS
.
779
14.1.3
RECORDS
(PREVIEW)
.
786
14.1.4
PATTERN
MATCHING
BEI
INSTANCEOF
(PREVIEW)
.
793
14.1.5
SEALED
TYPES
(PREVIEW)
.
795
14.1.6
LOKALE
ENUMS
UND
INTERFACES
(PREVIEW)
.
797
14.2
API-NEUERUNGEN
.
798
14.2.1
NEUE
METHODEN
IN
DER
KLASSE
STRING
.
798
14.2.2 NEUE
HILFSMETHODE
IN
DER
UTILITY-KLASSE
FILES
.
801
14.2.3 DER
TEEING
()
-KOLLEKTOR
.
802
INHALTSVERZEICHNIS
XV
14.3
JVM-NEUERUNGEN
.
805
14.3.1
VERBESSERUNG
BEI
NULLPOINTEREXCEPTIONS
.
805
14.3.2
ENTFERNUNG
DER
JAVASCRIPT-ENGINE
.
808
14.4
MICROBENCHMARKSUITE
.
808
14.4.1
EIGENE
MICROBENCHMARKS
UND
VARIANTEN
DAVON
.
808
14.4.2
MICROBENCHMARKS
MIT
JMH
.
811
14.4.3
FAZIT
ZU
JMH
.
817
14.5
JAVA
15
-
NOTWENDIGE
ANPASSUNGEN
FUER
BUILD-TOOLS
UND
IDES
.
818
14.5.1
JAVA
15
MIT
GRADLE
.
818
14.5.2 JAVA
15
MIT
MAVEN
.
819
14.5.3 JAVA
15
MIT
ECLIPSE
.
820
14.5.4 JAVA
15
MIT
INTELLIJ
.
821
14.5.5
JAVA
15
MIT
JSHELL
ODER
DER
KOMMANDOZEILE
.
821
14.6
FAZIT
.
822
IV
MODULARISIERUNG
823
15
MODULARISIERUNG
MIT
PROJECT
JIGSAW
.
825
15.1
GRUNDLAGEN
.
826
15.1.1
BEGRIFFLICHKEITEN
.
826
15.1.2
ZIELE
VON
PROJECT
JIGSAW
.
827
15.2
MODULARISIERUNG
IM
UEBERBLICK
.
828
15.2.1
GRUNDLAGEN
ZU
PROJECT
JIGSAW
.
828
15.2.2
BEISPIEL
MIT
ZWEI
MODULEN
.
834
15.2.3
PACKAGING
.
843
15.2.4
ABHAENGIGKEITEN
UND
MODULGRAPHEN
.
845
15.2.5
MODULE
DES
JDKS
EINBINDEN
.
847
15.2.6
ARTEN
VON
MODULEN
.
853
15.3
SICHTBARKEITEN
UND
ZUGRIFFSSCHUTZ
.
854
15.3.1
SICHTBARKEITEN
.
854
15.3.2
ZUGRIFFSSCHUTZ
UND
REFLECTION
.
856
15.4
EMPFEHLENSWERTES
VERZEICHNISLAYOUT
FUER
MODULE
.
858
15.5
KOMPATIBILITAET
UND
MIGRATION
.
860
15.5.1
KOMPATIBILITAETSMODUS
.
860
15.5.2
MIGRATIONSSZENARIEN
.
863
15.5.3
FALLSTRICK
BEI
DER
BOTTOM-UP-MIGRATION
.
867
15.5.4
BEISPIEL:
MIGRATION
MIT
AUTOMATIC
MODULES
.
868
15.5.5
BEISPIEL:
AUTOMATIC
UND
UNNAMED
MODULE
.
870
15.5.6
BEISPIEL:
ABWANDLUNG
MIT
ZWEI
AUTOMATIC
MODULES
.
873
15.5.7
FAZIT
.
875
15.6
ZUSAMMENFASSUNG
.
876
XVI
INHALTSVERZEICHNIS
V
FALLSTRICKE
UND
LOESUNGEN
IM
PRAXISAILTAG
877
16
BADSMELLS
.
879
16.1
PROGRAMMDESIGN
.
881
16.1.1
BAD
SMELL:
VERWENDEN
VON
MAGIE
NUMBERS
.
881
16.1.2
BAD
SMELL:
KONSTANTEN
IN
INTERFACES
DEFINIEREN
.
882
16.1.3
BAD
SMELL:
ZUSAMMENGEHOERENDE
KONSTANTEN
NICHT
ALS
TYP
DEFINIERT
.
884
16.1.4
BAD
SMELL:
CASTS
AUF
UNBEKANNTE
SUBTYPEN
.
886
16.1.5
BAD
SMELL:
PROGRAMMCODE
IM
LOGGING-CODE
.
888
16.1.6
BAD
SMELL:
DOMINANTER
LOGGING-CODE
.
889
16.1.7
BAD
SMELL:
UNVOLLSTAENDIGE
AENDERUNGEN
NACH
COPY-PASTE
.
890
16.1.8
BAD
SMELL:
UNVOLLSTAENDIGE
BETRACHTUNG
ALLER
ALTERNATIVEN
.
892
16.1.9
BAD
SMELL:
PRAE-/POSTINKREMENT
IN
KOMPLEXEREN
STATEMENTS
893
16.1.10
BAD
SMELL:
MEHRERE
AUFEINANDERFOLGENDE
PARAMETER
GLEI
CHEN
TYPS
.
896
16.1.11
BAD
SMELL:
GRUNDLOSER
EINSATZ
VON
REFLECTION
.
897
16.1.12
BAD
SMELL:
SYSTEM.EXIT
()
MITTEN
IM
PROGRAMM
.
898
16.1.13
BAD
SMELL:
VARIABLENDEKIARATION
NICHT
IM
KLEINSTMOEGLICHEN
SICHTBARKEITSBEREICH
.
900
16.2
KLASSENDESIGN
.
902
16.2.1
BAD
SMELL:
UNNOETIGERWEISE
VERAENDERLICHE
ATTRIBUTE
.
902
16.2.2
BAD
SMELL:
HERAUSGABE
VON
THIS
IM
KONSTRUKTOR
.
904
16.2.3
BAD
SMELL:
AUFRUF
ABSTRAKTER
METHODEN
IM
KONSTRUKTOR
.
905
16.2.4
BAD
SMELL:
MIX
ABSTRAKTER
UND
KONKRETER
BASISKLASSEN
.
910
16.2.5
BAD
SMELL:
REFERENZIERUNG
VON
SUBKLASSEN
IN
BASISKLASSEN
912
16.2.6
BAD
SMELL:
OEFFENTLICHER
DEFAULTKONSTRUKTOR
LEDIGLICH
ZUM
ZU
GRIFF
AUF
HILFSMETHODEN
.
914
16.3
FEHLERBEHANDLUNG
UND
EXCEPTION
HANDLING
.
915
16.3.1
BAD
SMELL:
UNBEHANDELTE
EXCEPTION
.
915
16.3.2
BAD
SMELL:
UNPASSENDER
EXCEPTION-TYP
.
917
16.3.3
BAD
SMELL:
FANGEN
DER
ALLGEMEINSTEN
EXCEPTION
.
918
16.3.4
BAD
SMELL:
EXCEPTIONS
ZUR
STEUERUNG
DES
KONTROLLFLUSSES
.
920
16.3.5
BAD
SMELL:
UNBEDACHTE
RUECKGABE
VON
NULL
.
922
16.3.6
BAD
SMELL:
RUECKGABE
VON
NULL
STATT
EXCEPTION
IM
FEHLERFALL
924
16.3.7
BAD
SMELL:
SONDERBEHANDLUNG
VON
RANDFAELLEN
.
926
16.3.8
BAD
SMELL:
KEINE
GUELTIGKEITSPRUEFUNG
VON
EINGABEPARAMETERN
927
16.3.9
BAD
SMELL:
FEHLERHAFTE
FEHLERBEHANDLUNG
.
929
16.3.10
BAD
SMELL:
I/O
OHNE
FINALLY
ODER
ARM
.
931
16.3.11
BAD
SMELL:
RESOURCE
LEAKS
DURCH
EXCEPTIONS
IM
KONSTRUKTOR
932
16.4
HAEUFIGE
FALLSTRICKE
.
937
16.5
WEITERFUEHRENDE
LITERATUR
.
952
INHALTSVERZEICHNIS
XVII
17
REFACTORINGS
.
953
17.1
REFACTORINGS
AM
BEISPIEL
.
954
17.2
DAS
STANDARDVORGEHEN
.
962
17.3
KOMBINATION
VON
BASIS-REFACTORINGS
.
965
17.3.1
REFACTORING-BEISPIEL:
AUSGANGSLAGE
UND
ZIEL
.
965
17.3.2
AUFLOESEN
DER
ABHAENGIGKEITEN
.
967
17.3.3
VEREINFACHUNGEN
.
974
17.3.4
VERLAGERN
VON
FUNKTIONALITAET
.
978
17.4
DER
REFACTORING-KATALOG
.
979
17.4.1
REDUZIERE
DIE
SICHTBARKEIT
VON
ATTRIBUTEN
.
979
17.4.2
MINIMIERE
VERAENDERLICHE
ATTRIBUTE
.
982
17.4.3
REDUZIERE
DIE
SICHTBARKEIT
VON
METHODEN
.
986
17.4.4
ERSETZE
MUTATOR-
DURCH
BUSINESS-METHODE
.
988
17.4.5
MINIMIEREZUSTANDSAENDERUNGEN
.
989
17.4.6
FUEHRE
EIN
INTERFACE
EIN
.
989
17.4.7
SPALTE
EIN
INTERFACE
AUF
.
990
17.4.8
FUEHRE
EIN
READ-ONLY-INTERFACE
EIN
.
991
17.4.9
FUEHRE
EIN
READ-WRITE-INTERFACE
EIN
.
992
17.4.10
LAGERE
FUNKTIONALITAET
IN
HILFSMETHODEN
AUS
.
993
17.4.11
TRENNE
INFORMATIONSBESCHAFFUNG
UND
-VERARBEITUNG
.
995
17.4.12
WANDLE
KONSTANTENSAMMLUNG
IN
ENUM
UM
.
1002
17.4.13
ENTFERNE
EXCEPTIONS
ZUR
STEUERUNG
DES
KONTROLLFLUSSES
.
1004
17.4.14
WANDLE
IN
UTILITY-KLASSE
MIT
STATISCHEN
HILFSMETHODEN
UM
.
1007
17.4.15
LOESE
IF-ELSE
/
INSTANCEOF
DURCH
POLYMORPHIE
AUF
.
1010
17.5
DEFENSIVES
PROGRAMMIEREN
.
1013
17.5.1
FUEHRE
EINE
ZUSTANDSPRUEFUNG
EIN
.
1013
17.5.2
UEBERPRUEFE
EINGABEPARAMETER
.
1014
17.6
FALLSTRICKE
BEI
REFACTORINGS
.
1019
17.7
WEITERFUEHRENDE
LITERATUR
.
1021
18
ENTWURFSMUSTER
.
1023
18.1
ERZEUGUNGSMUSTER
.
1026
18.1.1
ERZEUGUNGSMETHODE
.
1026
18.1.2
FABRIKMETHODE
(FACTORY
METHOD)
.
1029
18.1.3
ERBAUER
(BUILDER)
.
1032
18.1.4
SINGLETON
.
1035
18.1.5
PROTOTYP
(PROTOTYPE)
.
1040
18.2
STRUKTURMUSTER
.
1044
18.2.1
FASSADE
(FAPADE)
.
1044
18.2.2
ADAPTER
.
1047
18.2.3
DEKORIERER
(DECORATOR)
.
1049
18.2.4
KOMPOSITUM
(COMPOSITE)
.
1052
XVIII
INHALTSVERZEICHNIS
18.3
VERHALTENSMUSTER
.
1056
18.3.1
ITERATOR
.
1056
18.3.2
NULL-OBJEKT
(NULL
OBJECT)
.
1058
18.3.3
SCHABLONENMETHODE
(TEMPLATE
METHOD)
.
1061
18.3.4
STRATEGIE
(STRATEGY)
.
1065
18.3.5 BEFEHL
(COMMAND)
.
1077
18.3.6
PROXY
.
1084
18.3.7
BEOBACHTER
(OBSERVER)
.
1086
18.3.8
MVC-ARCHITEKTUR
.
1095
18.4
WEITERFUEHRENDE
LITERATUR
.
1097
VI
QUALITAETSSICHERUNGSMASSNAHMEN
1099
19
PROGRAMMIERSTIL
UND
CODING
CONVENTIONS
.
1101
19.1
GRUNDREGELN
EINES
GUTEN
PROGRAMMIERSTILS
.
1101
19.1.1
KEEP
IT
HUMAN-READABLE
.
1102
19.1.2 KEEP
IT
SIMPLE
AND
SHORT
(KISS)
.
1102
19.1.3 KEEP
IT
NATURAL
.
1102
19.1.4 KEEP
IT
CLEAN
.
1103
19.2
DIE
PSYCHOLOGIE
BEIM
SOURCECODE-LAYOUT
.
1103
19.2.1
GESETZ
DER
AEHNLICHKEIT
.
1103
19.2.2
GESETZ
DER
NAEHE
.
1105
19.3
CODING
CONVENTIONS
.
1106
19.3.1
GRUNDLEGENDE
NAMENS-UND
FORMATIERUNGSREGELN
.
1107
19.3.2
NAMENSGEBUNG
.
1110
19.3.3
DOKUMENTATION
.
1113
19.3.4
PROGRAMMDESIGN
.
1115
19.3.5
KLASSENDESIGN
.
1120
19.3.6
PARAMETERLISTEN
.
1124
19.3.7
LOGIK
UND
KONTROLLFLUSS
.
1125
19.4
SOURCECODE-PRUEFUNG
MIT
TOOLS
.
1128
19.4.1
METRIKEN
.
1129
19.4.2
SOURCECODE-PRUEFUNG
IM
BUILD-PROZESS
.
1133
20
UNIT
TESTS
.1143
20.1
TESTEN
IM
UEBERBLICK
.
1143
20.1.1
WAS
VERSTEHT
MAN
UNTER
TESTEN?
.
1143
20.1.2
TESTARTEN
IM
UEBERBLICK
.
1144
20.1.3
ZUSTAENDIGKEITEN
BEIM
TESTEN
.
1147
20.1.4
TESTEN
UND
QUALITAET
.
1150
20.2
WISSENSWERTES
ZU
TESTFAELLEN
.
1154
20.2.1
TESTFAELLE
MIT
JUNIT
DEFINIEREN
.
1154
INHALTSVERZEICHNIS
XIX
20.2.2
PROBLEM
DER
KOMBINATORIK
BEIM
BESTIMMEN
VON
TESTFAELLEN
.1163
20.3
BESONDERE
ASSERTIONS
UND
ANNOTATIONS
1171
20.4
PARAMETRIERTE
TESTS
MIT
JUNIT
5
1182
20.4.1
EINSTIEG
1182
20.4.2
VERBESSERUNG
DES
TESTS
DER
RABATTBERECHNUNG
1189
20.4.3
PRAXISBEISPIEL:
BERECHNUNG
IN
TESTFALL
VEREINFACHEN
1191
20.4.4
PRAXIS-TRICKKISTE
.
1194
20.5
FORTGESCHRITTENE
UNIT-TEST-TECHNIKEN
1201
20.5.1
STELLVERTRETEROBJEKTE
/
TEST-DOUBLES
1204
20.5.2
VORARBEITEN
FUER
DAS
TESTEN
MIT
STUBS
UND
MOCKS
1208
20.5.3
DIE
TECHNIK
E
XTRACT
AND
O
VERRIDE
1210
20.5.4
EINSTIEG
IN
DAS
TESTEN
MIT
MOCKS
UND
MOCKITO
1217
20.5.5
ABHAENGIGKEITEN
MIT
MOCKITO
AUFLOESEN
1226
20.5.6
UNIT
TESTS
VON
PRIVATEN
METHODEN
1228
20.6
TESTSMELLS
1230
20.6.1
TEST
SMELL:
UNANGEBRACHTES
ASSERTTRUE
()
UNDASSERT-
FALSE
()
1230
20.6.2
TEST
SMELL:
ZU
VIELE
ASSERTS
IM
TESTFALL
1231
20.6.3
TEST
SMELL:
ASSERTS
OHNE
HINWEIS
1233
20.6.4
TEST
SMELL:
EINSATZ
VON
TOSTRING
()
IN
ASSERTEQUALS
()
1234
20.6.5
TEST
SMELL:
UNIT
TESTS
ZUR
PRUEFUNG
VON
LAUFZEITEN
1235
20.7
NUETZLICHE
TOOLS
FUER
UNIT
TESTS
1237
20.7.1
HAMCREST
1237
20.7.2
ASSERTJ
1241
20.7.3
MOREUNIT
1246
20.7.4
INFINITEST
1247
20.7.5
JACOCO
1248
20.7.6
ECLEMMA
1252
20.8
UMSTIEG
VON
JUNIT
4
AUF
JUNIT
5
1254
20.8.1
ERWEITERUNG
IM
GRADLE-BUILD
FUER
JUNIT-5-TESTS
1254
20.8.2
VERAENDERUNGEN
IN
DEN
ANNOTATIONS
1254
20.8.3
ALTERNATIVEN
FUER
JUNIT
RULES
1256
20.8.4
VERAENDERUNGEN
BEI
PARAMETRIERTEN
TESTS
1260
20.8.5
ALTERNATIVE
ZUR
HAMCREST-INTEGRATION
IN
JUNIT
4
1261
20.9
FAZIT
1262
20.10WEITERFUEHRENDE
LITERATUR
1263
21
CODEREVIEWS
1265
21.1
DEFINITION
1265
21.2
PROBLEME
UND
TIPPS
ZUR
DURCHFUEHRUNG
1267
21.3
VORTEILE
VON
CODEREVIEWS
1269
21.4
CODEREVIEW-CHECKLISTE
1272
XX
INHALTSVERZEICHNIS
22
OPTIMIERUNGEN
.
1273
22.1
GRUNDLAGEN
.
1274
22.1.1
OPTIMIERUNGSEBENEN
UND
EINFLUSSFAKTOREN
.
1275
22.1.2
OPTIMIERUNGSTECHNIKEN
.
1276
22.1.3
CPU-BOUND-OPTIMIERUNGSEBENEN
AM
BEISPIEL
.
1278
22.1.4
MESSUNGEN
-
ERKENNEN
KRITISCHER
BEREICHE
.
1282
22.1.5
ABSCHAETZUNGEN
MIT
DER
O-NOTATION
.
1289
22.2
EINSATZ
GEEIGNETER
DATENSTRUKTUREN
.
1292
22.2.1
EINFLUSS
VON
ARRAYS
UND
LISTEN
.
1293
22.2.2
OPTIMIERUNGEN
FUER
SET
UND
MAP
.
1297
22.2.3
DESIGN
EINES
ZUGRIFFSINTERFACE
.
1299
22.3
LAZY
INITIALIZATION
.
1302
22.3.1
KONSEQUENZEN
DES
EINSATZES
DER
LAZY
INITIALIZATION
.
1305
22.3.2
LAZY
INITIALIZATION
MITHILFE
DES
PROXY-MUSTERS
.1307
22.4
OPTIMIERUNGEN
AM
BEISPIEL
.
1310
22.5
L/O-BOUND-OPTIMIERUNGEN
.
1318
22.5.1
TECHNIK
-
WAHL
PASSENDER
STRATEGIEN
.
1318
22.5.2
TECHNIK
-
CACHING
UND
POOLING
.
1321
22.5.3
TECHNIK
-
VERMEIDUNG
UNNOETIGER
AKTIONEN
.
1321
22.6
MEMORY-BOUND-OPTIMIERUNGEN
.
1325
22.6.1
TECHNIK
-
WAHL
PASSENDER
STRATEGIEN
.
1325
22.6.2
TECHNIK
-
CACHING
UND
POOLING
.
1326
22.6.3
OPTIMIERUNGENDERSTRINGVERARBEITUNG
.
1333
22.6.4
TECHNIK
-
VERMEIDUNG
UNNOETIGER
AKTIONEN
.
1336
22.7
CPU-BOUND-OPTIMIERUNGEN
.
1338
22.7.1
TECHNIK
-
WAHL
PASSENDER
STRATEGIEN
.
1339
22.7.2
TECHNIK
-
CACHING
UND
POOLING
.
1342
22.7.3
TECHNIK
-
VERMEIDUNG
UNNOETIGER
AKTIONEN
.
1344
22.8
WEITERFUEHRENDE
LITERATUR
.
1347
23
SCHLUSSGEDANKEN
.
1349
VII
ANHANG
1351
A
GRUNDLAGEN
ZUR
JAVA
VIRTUAL
MACHINE
.
1353
A.1
WISSENSWERTES
RUND
UM
DIE
JAVA
VIRTUAL
MACHINE
.
1353
A.1.1
AUSFUEHRUNG
EINES
JAVA-PROGRAMMS
.
1353
A.1.2
SPEICHERVERWALTUNG
UND
CLASSLOADING
.
1354
LITERATURVERZEICHNIS
.1357
INDEX
.
1361 |
any_adam_object | 1 |
any_adam_object_boolean | 1 |
author | Inden, Michael 1971- |
author_GND | (DE-588)143426753 |
author_facet | Inden, Michael 1971- |
author_role | aut |
author_sort | Inden, Michael 1971- |
author_variant | m i mi |
building | Verbundindex |
bvnumber | BV046970794 |
classification_rvk | ST 250 |
classification_tum | DAT 362 |
ctrlnum | (OCoLC)1226705590 (DE-599)DNB1215363710 |
discipline | Informatik |
discipline_str_mv | Informatik |
edition | 5., überarbeitete und aktualisierte Auflage |
format | Book |
fullrecord | <?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim"><record><leader>00000nam a22000001c 4500</leader><controlfield tag="001">BV046970794</controlfield><controlfield tag="003">DE-604</controlfield><controlfield tag="005">20211123</controlfield><controlfield tag="007">t</controlfield><controlfield tag="008">201102s2021 gw a||| |||| 00||| ger d</controlfield><datafield tag="015" ind1=" " ind2=" "><subfield code="a">20,N33</subfield><subfield code="2">dnb</subfield></datafield><datafield tag="016" ind1="7" ind2=" "><subfield code="a">1215363710</subfield><subfield code="2">DE-101</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9783864907074</subfield><subfield code="c">hbk. : EUR 52.90 (DE), circa EUR 54.40 (AT)</subfield><subfield code="9">978-3-86490-707-4</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">3864907071</subfield><subfield code="9">3-86490-707-1</subfield></datafield><datafield tag="024" ind1="3" ind2=" "><subfield code="a">9783864907074</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(OCoLC)1226705590</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(DE-599)DNB1215363710</subfield></datafield><datafield tag="040" ind1=" " ind2=" "><subfield code="a">DE-604</subfield><subfield code="b">ger</subfield><subfield code="e">rda</subfield></datafield><datafield tag="041" ind1="0" ind2=" "><subfield code="a">ger</subfield></datafield><datafield tag="044" ind1=" " ind2=" "><subfield code="a">gw</subfield><subfield code="c">XA-DE-BW</subfield></datafield><datafield tag="049" ind1=" " ind2=" "><subfield code="a">DE-91G</subfield><subfield code="a">DE-860</subfield><subfield code="a">DE-1050</subfield><subfield code="a">DE-92</subfield><subfield code="a">DE-29T</subfield><subfield code="a">DE-1043</subfield><subfield code="a">DE-M347</subfield><subfield code="a">DE-83</subfield><subfield code="a">DE-859</subfield><subfield code="a">DE-739</subfield><subfield code="a">DE-862</subfield><subfield code="a">DE-523</subfield><subfield code="a">DE-526</subfield></datafield><datafield tag="084" ind1=" " ind2=" "><subfield code="a">ST 250</subfield><subfield code="0">(DE-625)143626:</subfield><subfield code="2">rvk</subfield></datafield><datafield tag="084" ind1=" " ind2=" "><subfield code="a">DAT 362</subfield><subfield code="2">stub</subfield></datafield><datafield tag="100" ind1="1" ind2=" "><subfield code="a">Inden, Michael</subfield><subfield code="d">1971-</subfield><subfield code="e">Verfasser</subfield><subfield code="0">(DE-588)143426753</subfield><subfield code="4">aut</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">Der Weg zum Java-Profi</subfield><subfield code="b">Konzepte und Techniken für die professionelle Java-Entwicklung</subfield><subfield code="c">Michael Inden</subfield></datafield><datafield tag="250" ind1=" " ind2=" "><subfield code="a">5., überarbeitete und aktualisierte Auflage</subfield></datafield><datafield tag="264" ind1=" " ind2="1"><subfield code="a">Heidelberg</subfield><subfield code="b">dpunkt.verlag</subfield><subfield code="c">2021</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">xxix, 1382 Seiten</subfield><subfield code="b">Illustrationen, Diagramme</subfield><subfield code="c">24 cm x 16.5 cm</subfield></datafield><datafield tag="336" ind1=" " ind2=" "><subfield code="b">txt</subfield><subfield code="2">rdacontent</subfield></datafield><datafield tag="337" ind1=" " ind2=" "><subfield code="b">n</subfield><subfield code="2">rdamedia</subfield></datafield><datafield tag="338" ind1=" " ind2=" "><subfield code="b">nc</subfield><subfield code="2">rdacarrier</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Java Standard Edition 9</subfield><subfield code="0">(DE-588)113696553X</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="689" ind1="0" ind2="0"><subfield code="a">Java Standard Edition 9</subfield><subfield code="0">(DE-588)113696553X</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="0" ind2=" "><subfield code="5">DE-604</subfield></datafield><datafield tag="710" ind1="2" ind2=" "><subfield code="a">Dpunkt.Verlag (Heidelberg)</subfield><subfield code="0">(DE-588)6085529-0</subfield><subfield code="4">pbl</subfield></datafield><datafield tag="776" ind1="0" ind2="8"><subfield code="i">Erscheint auch als</subfield><subfield code="n">Online-Ausgabe, PDF</subfield><subfield code="z">978-3-96088-842-0</subfield></datafield><datafield tag="776" ind1="0" ind2="8"><subfield code="i">Erscheint auch als</subfield><subfield code="n">Online-Ausgabe, ePub</subfield><subfield code="z">978-3-96088-843-7</subfield></datafield><datafield tag="776" ind1="0" ind2="8"><subfield code="i">Erscheint auch als</subfield><subfield code="n">Online-Ausgabe, Mobi</subfield><subfield code="z">978-3-96088-844-4</subfield></datafield><datafield tag="856" ind1="4" ind2="2"><subfield code="m">X:MVB</subfield><subfield code="q">text/html</subfield><subfield code="u">http://deposit.dnb.de/cgi-bin/dokserv?id=7534aea73025431b9e4fdfb1fc1c351c&prov=M&dok_var=1&dok_ext=htm</subfield><subfield code="v">2020-08-12</subfield><subfield code="3">Inhaltstext</subfield></datafield><datafield tag="856" ind1="4" ind2="2"><subfield code="m">DNB Datenaustausch</subfield><subfield code="q">application/pdf</subfield><subfield code="u">http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=032378970&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA</subfield><subfield code="3">Inhaltsverzeichnis</subfield></datafield><datafield tag="943" ind1="1" ind2=" "><subfield code="a">oai:aleph.bib-bvb.de:BVB01-032378970</subfield></datafield></record></collection> |
id | DE-604.BV046970794 |
illustrated | Illustrated |
index_date | 2024-07-03T15:47:21Z |
indexdate | 2025-02-20T07:18:06Z |
institution | BVB |
institution_GND | (DE-588)6085529-0 |
isbn | 9783864907074 3864907071 |
language | German |
oai_aleph_id | oai:aleph.bib-bvb.de:BVB01-032378970 |
oclc_num | 1226705590 |
open_access_boolean | |
owner | DE-91G DE-BY-TUM DE-860 DE-1050 DE-92 DE-29T DE-1043 DE-M347 DE-83 DE-859 DE-739 DE-862 DE-BY-FWS DE-523 DE-526 |
owner_facet | DE-91G DE-BY-TUM DE-860 DE-1050 DE-92 DE-29T DE-1043 DE-M347 DE-83 DE-859 DE-739 DE-862 DE-BY-FWS DE-523 DE-526 |
physical | xxix, 1382 Seiten Illustrationen, Diagramme 24 cm x 16.5 cm |
publishDate | 2021 |
publishDateSearch | 2021 |
publishDateSort | 2021 |
publisher | dpunkt.verlag |
record_format | marc |
spellingShingle | Inden, Michael 1971- Der Weg zum Java-Profi Konzepte und Techniken für die professionelle Java-Entwicklung Java Standard Edition 9 (DE-588)113696553X gnd |
subject_GND | (DE-588)113696553X |
title | Der Weg zum Java-Profi Konzepte und Techniken für die professionelle Java-Entwicklung |
title_auth | Der Weg zum Java-Profi Konzepte und Techniken für die professionelle Java-Entwicklung |
title_exact_search | Der Weg zum Java-Profi Konzepte und Techniken für die professionelle Java-Entwicklung |
title_exact_search_txtP | Der Weg zum Java-Profi Konzepte und Techniken für die professionelle Java-Entwicklung |
title_full | Der Weg zum Java-Profi Konzepte und Techniken für die professionelle Java-Entwicklung Michael Inden |
title_fullStr | Der Weg zum Java-Profi Konzepte und Techniken für die professionelle Java-Entwicklung Michael Inden |
title_full_unstemmed | Der Weg zum Java-Profi Konzepte und Techniken für die professionelle Java-Entwicklung Michael Inden |
title_short | Der Weg zum Java-Profi |
title_sort | der weg zum java profi konzepte und techniken fur die professionelle java entwicklung |
title_sub | Konzepte und Techniken für die professionelle Java-Entwicklung |
topic | Java Standard Edition 9 (DE-588)113696553X gnd |
topic_facet | Java Standard Edition 9 |
url | http://deposit.dnb.de/cgi-bin/dokserv?id=7534aea73025431b9e4fdfb1fc1c351c&prov=M&dok_var=1&dok_ext=htm http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=032378970&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |
work_keys_str_mv | AT indenmichael derwegzumjavaprofikonzepteundtechnikenfurdieprofessionellejavaentwicklung AT dpunktverlagheidelberg derwegzumjavaprofikonzepteundtechnikenfurdieprofessionellejavaentwicklung |
Beschreibung
THWS Schweinfurt Zentralbibliothek Lesesaal
Signatur: |
2000 ST 250 J35 I38 W4(5) |
---|---|
Exemplar 1 | ausleihbar Verfügbar Bestellen |