Inhaltsverzeichnis | 5 |
1 Einleitung | 19 |
I Sprach- und API-Erweiterungen | 0 |
2 Syntaxerweiterungen | 23 |
2.1 Anonyme innere Klassen und der Diamond Operator | 23 |
2.2 Nutzung von »effectively final«-Variablen im ARM | 24 |
2.3 Neuerung bei der @SafeVarargs-Annotation | 26 |
2.4 Erweiterung der @Deprecated-Annotation | 29 |
2.5 Private Methoden in Interfaces | 30 |
2.6 Verbotener Bezeichner '_' | 32 |
3 Neues und Änderungen im JDK | 33 |
3.1 Neue APIs | 33 |
3.1.1 Das neue Process-API | 33 |
3.1.2 Collection-Factory-Methoden | 39 |
3.1.3 Reactive Streams und die Klasse Flow | 45 |
3.1.4 Taskbar-Support | 55 |
3.1.5 Verarbeitung von Stackframes und die Klasse StackWalker | 58 |
3.1.6 HTTP/2-Support | 60 |
3.2 Erweiterte APIs | 65 |
3.2.1 Erweiterungen in der Klasse InputStream | 66 |
3.2.2 Erweiterungen rund um die Klasse Optional | 68 |
3.2.3 Erweiterungen im Stream-API | 73 |
3.2.4 Erweiterungen in der Klasse LocalDate | 77 |
3.2.5 Support von UTF-8 in ResourceBundles | 78 |
3.2.6 Erweiterungen in der Klasse Arrays | 83 |
3.2.7 Erweiterungen in der Klasse Objects | 85 |
3.2.8 Erweiterungen in der Klasse CompletableFuture | 85 |
3.2.9 Erweiterungen in Class | 89 |
3.2.10 Die Klasse MethodHandle | 91 |
3.2.11 Die Klasse VarHandle | 94 |
3.3 Sonstige Änderungen | 95 |
3.3.1 Optimierung bei Strings | 96 |
3.3.2 Erweiterungen im Unicode-Support | 97 |
3.3.3 HiDPI-Support | 99 |
3.3.4 Multi-Resolution Images | 99 |
3.3.5 Unterstützung von TIFF-Grafiken | 102 |
3.3.6 Support für Spin-Wait-Loops | 103 |
3.3.7 Deprecation diverser Typen und Methoden im JDK | 104 |
4 Änderungen in der JVM | 109 |
4.1 Performance-Verbesserungen | 109 |
4.2 HTML5 Javadoc | 110 |
4.3 Änderung des Versionsschemas | 111 |
4.4 Browser-Plugin ist deprecated | 112 |
4.5 Garbage Collection | 113 |
4.6 Unterstützung von Multi-Release-JARs | 114 |
4.7 Java + REPL => jshell | 117 |
5 Übungen zu den Neuerungen in JDK 9 | 125 |
II Modularisierung | 0 |
6 Modularisierung mit Project Jigsaw | 139 |
6.1 Grundlagen | 140 |
6.1.1 Bisherige Varianten der Modularisierung | 141 |
6.1.2 Warum wir Modularisierung brauchen | 143 |
6.2 Modularisierung im Überblick | 144 |
6.2.1 Grundlagen zu Project Jigsaw | 144 |
6.2.2 Einführendes Beispiel | 152 |
6.2.3 Komplexeres Beispiel | 155 |
6.2.4 Packaging | 164 |
6.2.5 Linking | 165 |
6.2.6 Abhängigkeiten und Modulgraphen | 169 |
6.2.7 Module des JDKs einbinden | 171 |
6.2.8 Arten von Modulen | 178 |
6.3 Sichtbarkeiten und Zugriffsschutz | 179 |
6.3.1 Sichtbarkeiten | 179 |
6.3.2 Zugriffsschutz an Beispielen | 181 |
6.3.3 Transitive Abhängigkeiten (Implied Readability) | 186 |
6.4 Zusammenfassung | 191 |
7 Weiterführende Themen zur Modularisierung | 193 |
7.1 Modularisierung und Services | 194 |
7.1.1 Begrifflichkeiten: API, SPI und Service Provider | 194 |
7.1.2 Service-Ansatz in Java seit JDK 6 | 195 |
7.1.3 Services im Bereich der Modularisierung | 198 |
7.1.4 Definition eines Service Interface | 199 |
7.1.5 Realisierung eines Service Provider | 200 |
7.1.6 Realisierung eines Service Consumer | 202 |
7.1.7 Kontrolle der Abhängigkeiten | 204 |
7.1.8 Fazit | 205 |
7.2 Modularisierung und Reflection | 206 |
7.2.1 Verarbeitung von Modulen mit Reflection | 206 |
7.2.2 Tool zur Ermittlung von Modulen zu Klassen | 208 |
7.2.3 Konvertierungstool für import zu requires | 210 |
7.2.4 Besonderheiten bei Reflection | 213 |
7.3 Kompatibilität und Migration | 219 |
7.3.1 Kompatibilitätsmodus | 219 |
7.3.2 Migrationsszenarien | 222 |
7.3.3 Fallstrick bei der Bottom-up-Migration | 226 |
7.3.4 Beispiel: Migration mit Automatic Modules | 227 |
7.3.5 Beispiel: Automatic und Unnamed Module | 229 |
7.3.6 Abwandlung mit zwei Automatic Modules | 232 |
7.3.7 Mögliche Schwierigkeiten bei Migrationen | 234 |
7.3.8 Fazit | 234 |
8 Übungen zur Modularisierung | 235 |
III Verschiedenes | 0 |
9 Build-Tools und IDEs | 247 |
9.1 Nicht modularisierte Applikationen | 247 |
9.1.1 Gradle | 249 |
9.1.2 Maven | 251 |
9.1.3 Eclipse | 253 |
9.1.4 IntelliJ IDEA | 253 |
9.1.5 NetBeans | 253 |
9.2 Nicht modularisierte Applikationen mit HTTP/2-API | 254 |
9.2.1 Gradle | 254 |
9.2.2 Maven | 256 |
9.2.3 Eclipse | 258 |
9.2.4 IntelliJ IDEA | 259 |
9.2.5 NetBeans | 261 |
9.3 Modularisierte Applikationen | 262 |
9.3.1 Gradle | 263 |
9.3.2 Maven | 268 |
9.3.3 Eclipse | 273 |
9.3.4 IntelliJ IDEA | 275 |
9.3.5 NetBeans | 279 |
9.4 Besonderheiten beim Unit-Testen | 282 |
9.4.1 Gradle | 283 |
9.4.2 Maven | 284 |
9.4.3 Eclipse | 285 |
9.4.4 IntelliJ IDEA | 286 |
9.4.5 NetBeans | 286 |
9.4.6 Kommandozeile | 286 |
9.5 Kompatibilitätsmodus | 293 |
9.5.1 Gradle | 294 |
9.5.2 Maven | 295 |
9.5.3 Eclipse | 296 |
9.5.4 IntelliJ IDEA | 296 |
9.5.5 NetBeans | 296 |
9.5.6 Kommandozeile | 296 |
9.6 Fazit | 297 |
10 Zusammenfassung | 299 |
IV Anhang | 0 |
A Schnelleinstieg in Java 8 | 305 |
A.1 Einstieg in Lambdas | 305 |
A.1.1 Lambdas am Beispiel | 305 |
A.1.2 Functional Interfaces und SAM-Typen | 306 |
A.1.3 Type Inference und Kurzformen der Syntax | 309 |
A.1.4 Methodenreferenzen | 310 |
A.2 Streams im Überblick | 311 |
A.2.1 Streams erzeugen – Create Operations | 312 |
A.2.2 Intermediate und Terminal Operations im Überblick | 314 |
A.2.3 Zustandslose Intermediate Operations | 316 |
A.2.4 Zustandsbehaftete Intermediate Operations | 319 |
A.2.5 Terminal Operations | 321 |
A.3 Neuerungen in der Datumsverarbeitung | 325 |
A.3.1 Neue Aufzählungen, Klassen und Interfaces | 326 |
A.3.2 Die Klasse Instant | 328 |
A.3.3 Die Klasse Duration | 329 |
A.3.4 Die Klassen LocalDate, LocalTime und LocalDateTime | 330 |
A.3.5 Die Klasse Period | 331 |
A.3.6 Datumsarithmetik mit TemporalAdjusters | 333 |
A.4 Diverse Erweiterungen | 335 |
A.4.1 Erweiterungen im Interface Comparator | 335 |
A.4.2 Die Klasse Optional | 337 |
A.4.3 Die Klasse CompletableFuture | 343 |
B Einführung Gradle | 347 |
B.1 Projektstruktur für Maven und Gradle | 347 |
B.2 Builds mit Gradle | 349 |
C Einführung Maven | 359 |
C.1 Maven im Überblick | 359 |
C.2 Maven am Beispiel | 362 |
Literaturverzeichnis | 365 |
Index | 365 |
www.dpunkt.de | 0 |