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