Java 8 Neuheiten

Transcrição

Java 8 Neuheiten
Java 8 Neuheiten
Seminarunterlage
Version: 8.05
Copyright ORDIX AG
Version 8.05 vom
4. Januar 2017
Dieses Dokument wird durch die ORDIX AG veröffentlicht.
Copyright ORDIX AG. Alle Rechte vorbehalten.
Alle Produkt- und Dienstleistungs-Bezeichnungen sind Warenzeichen oder eingetragene Warenzeichen der
jeweiligen Firmen und beziehen sich auf Eintragungen in den USA oder USA-Warenzeichen.
Weitere Logos und Produkt- oder Handelsnamen sind eingetragene Warenzeichen oder Warenzeichen der
jeweiligen Unternehmen.
Kein Teil dieser Dokumentation darf ohne vorherige schriftliche Genehmigung der ORDIX AG weitergegeben
oder benutzt werden.
Adressen der ORDIX AG
Die ORDIX AG besitzt folgende Geschäftsstellen
ORDIX AG
Karl-Schurz-Str. 19a
D-33100 Paderborn
Tel.: (+49) 0 52 51 / 10 63 - 0
Fax.: (+49) 01 80 / 1 67 34 90
ORDIX AG
Kreuzberger Ring 13
D-65205 Wiesbaden
Tel.: (+49) 06 11 / 7 78 40 – 00
Fax.: (+49) 01 80 / 1 67 34 90
ORDIX AG
An der alten Ziegelei 5
D-48157 Münster
Tel.: (+49) 02 51 / 9 24 35 – 00
Fax.: (+49) 01 80 / 1 67 34 90
ORDIX AG
Wikingerstraße 18-20
D-51107 Köln
Tel.: (+49) 02 21 / 8 70 61 – 0
Fax.: (+49) 01 80 / 1 67 34 90
ORDIX AG
Welser Straße 9
D-86368 Gersthofen
Tel.: (+49) 08 21 / 507 492 – 0
Fax.: (+49) 01 80 / 1 67 34 90
Internet: http://www.ordix.de
Email: [email protected]
Seite 2
Java 8 Neuheiten
Version: 8.05
Copyright ORDIX AG
Inhaltsverzeichnis
Inhaltsverzeichnis
1
JλVλ 8: Historie und Überblick ........................................................................................... 7
1.1
1.2
1.3
1.4
1.5
1.6
1.7
2
Geschichte von Java................................................................................................... 8
Unser Fokus ............................................................................................................... 9
JDK – Roadmap ....................................................................................................... 10
Java Plattform Standard Edition 7 .............................................................................. 11
Project Coin (JS R 334).............................................................................................. 12
1.5.1 Bessere Integer Literale ................................................................................ 12
1.5.2 Type Inference.............................................................................................. 13
1.5.3 Strings in Switch Anweisungen ...................................................................... 14
1.5.4 Resource-Management vor JDK7 .................................................................. 15
1.5.5 Resource-Management mit JDK 7.................................................................. 16
1.5.6 Closable Interfac e ......................................................................................... 17
1.5.7 Index-Operator in Listen und Maps................................................................. 18
1.5.8 Multicatch ..................................................................................................... 19
1.5.9 Rethrow in JDK 7 .......................................................................................... 20
Fork/Join (JSR 166y) ................................................................................................ 21
1.6.1 Motivation..................................................................................................... 21
1.6.2 ForkJoinPool ................................................................................................ 22
1.6.3 Beispiel: RecursiveAction .............................................................................. 23
Java 8 Neuigkeiten ................................................................................................... 24
1.7.1 Java Plattform Standard, Edition 8 ................................................................. 24
1.7.2 IDE -Unterstützung – eclipse 4.x ..................................................................... 25
1.7.3 IDE -Unterstützung – NetBeans 7.4 (1/2)......................................................... 26
JλVλ 8: Lambda-Ausdrücke (JSR 335) ............................................................................. 27
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
Funktionale Programmierung..................................................................................... 28
OOP vs. Funktionale Programmierung ....................................................................... 29
Neues Sprac hkonstrukt ............................................................................................. 30
Lambda-Ausdruck (λ)................................................................................................ 31
Beispiel 1: Lambda (λ) .............................................................................................. 32
Beispiel 2: Lambda (λ) .............................................................................................. 33
Funktionale Interfac es ............................................................................................... 34
Verwendung von Lambda-A usdrücken ....................................................................... 35
Beispiel: Verwendung von Lambdas .......................................................................... 36
Zieltyp eines Lambda-A usdrucks ............................................................................... 37
Beispiel: Zieltyp (Target -Typing) ................................................................................ 38
Scoping und Variablenbindung .................................................................................. 39
Funktionen in Java 8 API - java.util.Function............................................................... 40
Beispiel: Vordefinierte Funktionen in Java 8 ............................................................... 41
Methodenreferenzen ................................................................................................. 42
2.15.1 Methodenreferenzen Definition ...................................................................... 43
2.15.2 Beispiel: Methodenreferenzen........................................................................ 44
2.16 Default-Methoden ..................................................................................................... 46
3
JλVλ 8: Streams und Bulk-Operationen (JSR TBD) .......................................................... 48
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
Streams, Motivation .................................................................................................. 49
Streams ................................................................................................................... 50
Stream – Management .............................................................................................. 52
Streaming API – Lambda .......................................................................................... 53
Stream API - Erzeugung ........................................................................................... 54
Beispiel: Streams erzeugen ....................................................................................... 55
Bulk-Operationen – Zwischenoperationen .................................................................. 56
Bulk-Operationen - Terminaloperationen .................................................................... 57
Pipelines .................................................................................................................. 58
3.9.1 Beispiel: Pipeline .......................................................................................... 59
3.10 Parallelisierung ......................................................................................................... 60
3.10.1 Beispiel: Parallelisierung................................................................................ 61
3.11 Laziness .................................................................................................................. 62
Version: 8.05
Copyright ORDIX AG
Seite 3
Java 8 Neuheiten
Inhaltsverzeichnis
3.11.1 Beispiel: Lazy Verhalten ................................................................................ 63
3.12 Streaming API - Neue Funktionalitäten....................................................................... 64
3.12.1 Beispiel: Streaming API – Core Methoden ...................................................... 65
3.13 Iteration: forEac h ...................................................................................................... 66
3.14 Externe vs. interne Iteration ....................................................................................... 67
3.15 Beispiel: forEach....................................................................................................... 68
3.16 Einfache Parallelisierung ........................................................................................... 69
3.17 Parallele Int erne Iterationen...................................................................................... 70
3.18 Beispiel: Parallelität................................................................................................... 71
3.19 Stream Trans formation.............................................................................................. 72
3.20 Suchen in Listen ....................................................................................................... 73
3.21 Effiziente Suche: filter ............................................................................................... 74
3.22 Elemente umformen: map ......................................................................................... 75
3.23 Umformung Kaskadierung: flatMap ............................................................................ 76
3.23.1 Beispiel : flatMap .......................................................................................... 77
3.23.2 Einzelergebnisse aus Streams: reduce ........................................................... 78
3.23.3 Beispiel: reduce ............................................................................................ 79
3.24 Strukturergebnisse aus Streams: collect..................................................................... 80
3.24.1 Beispiel: collect ............................................................................................. 81
3.25 Elemente in eine Map packen: collect ........................................................................ 82
3.26 Kollisionen behandeln ............................................................................................... 83
3.27 Gruppierung durchführen: groupingBy ........................................................................ 84
4
JλVλ 8: Annotationen (JSR 308) ....................................................................................... 85
4.1
5
Annotations Java Types (JS R 308) ............................................................................ 86
4.1.1 Annotationen ................................................................................................ 86
4.1.2 Anwendungsszenarien .................................................................................. 87
4.1.3 Definition von Annotation Typen..................................................................... 88
4.1.4 Beispiel: Annotations definieren und verwenden ............................................. 89
4.1.5 Restriktion auf Annotation Typen ................................................................... 90
4.1.6 Default Werte ............................................................................................... 92
4.1.7 Beispiel: Default Werte .................................................................................. 93
4.1.8 Meta-Daten für Annotationen ......................................................................... 94
Date & Time API (JSR 310) ............................................................................................... 96
5.1
5.2
5.3
5.4
5.5
Begriff: Zeit............................................................................................................... 97
Grundkonzepte ......................................................................................................... 98
5.2.1 Zeitmessung ................................................................................................. 98
5.2.2 Zeitmessung – Wissenschaftlich .................................................................... 99
Date & Time API (vor JDK 8) ....................................................................................100
5.3.1 Date und Time AP I (JDK < 8)....................................................................... 100
5.3.2 Date und Time AP I...................................................................................... 101
5.3.3 Zeitskala – Interpretationen ......................................................................... 102
5.3.4 UTC-Zeitzonen ........................................................................................... 103
5.3.5 Daylight Saving Time (DS T)......................................................................... 105
5.3.6 Demo ......................................................................................................... 106
Date & Time API (JS R 310) ......................................................................................107
5.4.1 Motivation – Wozu JS R 310? ....................................................................... 107
5.4.2 Date und Time AP I (JSR 310) – Konzepte .................................................... 108
5.4.3 JSR 310 – Ziele .......................................................................................... 109
5.4.4 Innovationen mit JS R 310............................................................................ 110
5.4.5 ISO-8601 (modernes Kalendersystem) ......................................................... 111
JSR 310 – API .........................................................................................................114
5.5.1 Zeitangabe mit JSR 310 .............................................................................. 114
5.5.2 Der A nfang - epoch (Point 0) ....................................................................... 115
5.5.3 Ausgereifte AP I........................................................................................... 116
5.5.4 Instant ........................................................................................................ 117
5.5.5 Demo ......................................................................................................... 118
5.5.6 Duration (Zeitintervall) ................................................................................. 119
5.5.7 Demo ......................................................................................................... 120
Seite 4
Java 8 Neuheiten
Version: 8.05
Copyright ORDIX AG
Inhaltsverzeichnis
5.6
5.7
5.8
5.9
6
JλVλ 8: Nashorn ..............................................................................................................152
6.1
6.2
6.3
7
5.5.8 Weitere Operationen mit Duration ................................................................ 121
5.5.9 Period (Dauer) ............................................................................................ 122
5.5.10 LocalDate ................................................................................................... 123
5.5.11 Demo ......................................................................................................... 124
5.5.12 Demo LocalTime......................................................................................... 126
5.5.13 Demo LocalDateTime.................................................................................. 127
5.5.14 Zeitzonen - ZoneId ...................................................................................... 128
5.5.15 ZoneRules .................................................................................................. 129
5.5.16 ZoneOffset ................................................................................................. 130
5.5.17 ZonedDateTime .......................................................................................... 131
5.5.18 OffsetDateTime vs. ZonedDateTime ............................................................ 132
5.5.19 DateTimeFormatter ..................................................................................... 133
Fazit: java.time vs. java.util.Date, Calendar ...............................................................134
5.6.1 JSR 310 - AP I Design ................................................................................. 134
5.6.2 Ausgereiftere AP I – Typen ........................................................................... 135
5.6.3 Beispiel: Lesen von Dat e Time Felder .......................................................... 136
5.6.4 Beispiel: Setzen von Date Time Felder ......................................................... 137
5.6.5 Beispiel: Berechnungen mit Date Time Felder............................................... 138
5.6.6 Static Factories ........................................................................................... 139
5.6.7 Beispiel: Typsicherheit................................................................................. 140
Fazit: Chronology – regional calendar .......................................................................141
5.7.1 Calendar API .............................................................................................. 141
5.7.2 Beispiel: ChronoLocalDateTime ................................................................... 142
5.7.3 Calendar API-Mapping ................................................................................ 143
5.7.4 Beispiel: ChronoLocalDate .......................................................................... 144
5.7.5 Beispiel: ChronoLocalDateTime ................................................................... 145
5.7.6 Beispiel: JapaneseDate, Era ........................................................................ 146
5.7.7 Standardisierte Formate .............................................................................. 147
5.7.8 Beispiel: DateTimeFormatter ....................................................................... 148
5.7.9 Update von JDB C in JDK 8.......................................................................... 149
Fazit .......................................................................................................................150
Interessante Links!...................................................................................................151
Motivation: flexible Methoden-A ufrufe........................................................................153
(Skript-) Sprachen in der JVM...................................................................................154
Nashorn ..................................................................................................................155
6.3.1 Nashorn - JavaScript Engine in der JVM....................................................... 155
6.3.2 Projekt Nashorn JEP 174 ............................................................................ 156
6.3.3 Beispiel: JSR 223 API ................................................................................. 157
JλVλ 8. NIO.2 (JSR 203) ...................................................................................................158
7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
7.9
7.10
7.11
7.12
7.13
7.14
7.15
7.16
7.17
7.18
Motivation ...............................................................................................................159
Features von NIO.2..................................................................................................160
NIO.2 Klassen API ...................................................................................................161
Java.nio.file.Pat h .....................................................................................................162
Klasse Files.............................................................................................................163
Beispiel: FileSystem, Path ........................................................................................164
Anhängen in eine Datei ............................................................................................165
Copy mit/ohne Optionen...........................................................................................166
Move mit/ohne Optionen ..........................................................................................167
Datei-Operationen ...................................................................................................168
Weiteres .................................................................................................................169
Datenströme (Streams) ............................................................................................170
AsynchronousChannel .............................................................................................171
Beispiel: Future<V> (1/2)..........................................................................................172
Beispiel: CompletionHandler<V,? super A> ...............................................................173
FileSystem – Factory ...............................................................................................174
Dateisystem Notifikationen .......................................................................................175
Benutzerdefinierte Attribute ......................................................................................176
Version: 8.05
Copyright ORDIX AG
Seite 5
Java 8 Neuheiten
Inhaltsverzeichnis
7.19 Beispiel: UserDefinedFileAttributeView......................................................................177
Seite 6
Java 8 Neuheiten
Version: 8.05
Copyright ORDIX AG