Herzlich willkommen zum DevDay Neuerungen der Java SE 9. Dominic A. Merz Fachbereichsleiter Java, Web und Mobile Technologies

Ähnliche Dokumente
Universität Karlsruhe (TH)

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Java 8. basierend auf Folien von Florian Erhard

Programmieren I. Dokumentation mit javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

Build Management Tool

Programmierung für Mathematik HS11

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Faulheit professionell: Fertige Datenbehälter. Das Java-Collections-Framework Typsicherheit Generische Klassen

Neuere Sprachelemente in Java

Meta Programming and Reflection in Java

Programmieren 2 Java Überblick

Java I Vorlesung Generics und Packages

Software Entwicklung 1

II.1.1. Erste Schritte - 1 -

Info B VL 11: Innere Klassen/Collections

OCP Java SE 8. Lambda

Einstieg in die Informatik mit Java

OCP Java SE 8. Lambda

Java-Schulung Grundlagen

Wiederholung aus SWE2

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

4. Vererbung Die Klasse Object. Die Klasse Object

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

ADT: Java Collections und ArrayList

Johannes Unterstein - TINF16 - Java - Sommersemester 2017 JAVA. Weiterführende Spracheigenschaften

Java für C++ Programmierer

Implementieren von Klassen

Einstieg in die Informatik mit Java

3.5 Arten von Modulen

7. Pakete Grundlagen der Programmierung 1 (Java)

Einstieg in die Informatik mit Java

Programmentwicklung ohne BlueJ

12 Abstrakte Klassen, finale Klassen und Interfaces

Build Management Tool?

Java 7. Oliver Szymanski

Objektorientierte Programmierung

Einstieg in die Informatik mit Java

C# im Vergleich zu Java

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Heute. Grafische Benutzeroberflächen (Anonyme) innere Klassen Einfache Simulationen main / ausführbare jar-files IT I - VO 11 1

Spracherweiterungen in Java 5

Grundlagen der Programmierung Prof. H. Mössenböck. 15. Pakete

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

Java 9: Endlich Jigsaw! Salem Ben Nasr, DOAG

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Programmiermethodik 3. Klausur Lösung

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. Juni 2004

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Programmieren 2 16 Java Collections und Generizität

Programmieren in Java

Tag 4 Repetitorium Informatik (Java)

Methoden und Wrapperklassen

Tag 8 Repetitorium Informatik (Java)

Web-Techniken Einführung in JavaScript

Algorithmen und Datenstrukturen

Internetanwendungstechnik (Übung)

Kapitel 18: Java ein paar Kleinigkeiten zum Schluss. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1

Modulare Anwendungen und die Lookup API. Geertjan Wielenga NetBeans Team Deutschsprachige Überarbeitung, Aljoscha Rittner NetBeans Dream Team

Delegaten. d. h. eine Tätigkeitsanforderung wird weitergeleitet

Gebundene Typparameter

Programmieren I. Dokumentation mit Javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

2 Eine einfache Programmiersprache

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Kapitel 5: Interfaces

Informatik II Übung 6

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

2 Eine einfache Programmiersprache

Build Management Tool?

Aufgabe11. Methode test1. import java.util.hashmap; import java.util.arraylist; public class Aufgabe11 {

II.4.4 Exceptions - 1 -

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Info B VL 14: Java Collections/Reflections

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

2 Eine einfache Programmiersprache

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Einstieg in die Informatik mit Java

Erste Java-Programme (Scopes und Rekursion)

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Vererbung, Polymorphie

Java Spickzettel von Panjutorials.de

Empfehlenswerte Literatur

II.1.1. Erste Schritte - 1 -

Wiederholung JAVA. 1. (Vorbereitung)

Lösungshinweise/-vorschläge zum Übungsblatt 11: Software-Entwicklung 1 (WS 2017/18)

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Praxis der Programmierung

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Programmieren in Java

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Transkript:

Herzlich willkommen zum DevDay 2017 Neuerungen der Java SE 9 Dominic A. Merz Fachbereichsleiter Java, Web und Mobile Technologies

Agenda n Einführung des Module System n Anpassung der Sprache n Erweiterung der API n JVM Features n Verbesserung der Performance 2

Module System: Überblick n Projekt Jigsaw (seit 2008!) n Modul wie JAR, aber: n mit einem Namen n mit definierten Abhängigkeiten n mit Kapselung n ohne Versionierung n Java SE / JDK auch in Module aufgeteilt (cf. Module Graphs) n kein neues Format 3

Module System: Module Descriptor n Datei mit Namen module-info.java n Beispiel: module java.sql { requires transitive java.logging; requires transitive java.xml; uses java.sql.driver; exports java.sql; exports javax.sql; exports javax.transaction.xa; n keine neuen Schlüsselwörter (wie requires, exports, uses, transitive u.a.) 4

Module System: Feature "Reliable Configuration" n alle requires Module unbedingt vorhanden n keine Mehrdeutigkeiten n keine Abhängigkeitszyklen n kein Paket gleichzeitig in mehreren Modulen 5

Module System: Feature "Strong Encapsulation" n Kapselung mit exports n Konsequenz: neue Definition von public n Der Typ ist public. n Das Modul exportiert das entsprechende Paket. n Ihr Modul benötigt das entsprechende Modul. 6

Module System: Feature "Service Registry" n alle requires Module müssen vorhanden sein n Beispiel: module mysql.driver { requires java.sql; provides java.sql.driver with com.mysql.mysqldriver; n Laden mit: List<Driver> drivers = new ArrayList<>(); ServiceLoader.load(Driver.class).forEach(drivers::add); 7

Module System: weitere Features n Tuning Features n feingranulare Abhängigkeiten: "Optional Dependencies" n feingranulare Kapselung: "Qualified Exports" n namenlose oder automatische Module: für schrittweise Migration n Module in Layers: für Container n Runtime Images: mit jlink (neues Linker Tool) 8

Sprachanpassungen: private Methoden in Schnittstellen n Beispiel: public interface Calculator { default boolean isevensum(int... values) { return sum(values) % 2 == 0; default boolean isoddsum(int... values) { return sum(values) % 2 == 1; private int sum(int[] numbers) { return IntStream.of(numbers).sum(); 9

Sprachanpassungen: private Methoden in Schnittstellen n für gemeinsamen Code innerhalb der Schnittstelle n wie private Methoden in abstract Klassen n müssen implementiert sein n sind nur in der Schnittstelle sichtbar n können nicht überschrieben werden 10

Sprachanpassungen: try-with-resources n Beispiel: public void method(connection connection) throws Exception { try (connection) { connection.use(); n bisherige Zuweisung an eine lokale, implizit final deklarierte Variable fällt weg n Nutzung des neuen Konzepts aus Java SE 8: "effectively final" n Compiler verhindert immer noch eine neue Zuweisung 11

Sprachanpassungen: Diamond-Operator n Beispiel: List<String> list = new ArrayList<>() {; n Typparameter kann auch bei anonymen Klassen inferiert werden 12

Sprachanpassungen: @SafeVarargs n Heap Polution: private <T> T[] replace(t value, T... values) { /* replace null in values with value */ return values; private <T> T[] replace(t value, T first, T second) { return replace(value, first, second); n kein Array von Typparametern möglich: Rückgabewert der ersten Methode ist Object[] n Compiler warnt auch bei sicheren Fällen n Annotation @SafeVarargs verhindert Warnung: nur bei final deklarierten Methoden möglich 13

Sprachanpassungen: @SafeVarargs n Beispiel: @SafeVarargs private <T> Optional<T> firstnonnull(t... values) { return Arrays.stream(values).filter(Objects::nonNull).findFirst(); n Annotation auch bei private deklarierten Methoden anwendbar 14

Sprachanpassungen: @Deprecated n Beispiel: import java.io.linenumberinputstream; @Deprecated public class Deprecation { private LineNumberInputStream() in; n bei mit @Deprecated annotierten Typen keine Warnung aufgrund des Imports mehr 15

API: Collection Factories n Deklarative Liste: List<String> list = [ "one", "two", "three" ]; Wäre das nicht toll?! n Deklarative Abbildung: Map<String, Integer> map = [ "one" = 1, "two" = 2, "three" = 3 ]; Wäre das nicht cool?! n IT'S NOT GONNA HAPPEN! Hmm... 16

API: Collection Factories n Gründe: n Änderung an der Sprache sehr kostspielig n Sprache an das Collection Framework gebunden n spezifische Typen werden bevorzugt n Lösung: einfache Fabrikmethoden 17

API: Collection Factories n Beispiel für Liste: List<String> list = List.of("one", "two", "three"); n Beispiel für Menge: Set<String> set = Set.of("one", "two", "three"); n Beispiel für Abbildung: Map<String, Integer> map = Map.of("one", 1, "two", 2, "three", 3); n Beispiel für Abbildung (mit Tupeln): Map<String, Integer> map = Map.ofEntries( entry("one", 1), entry("two", 2), entry("three", 3)); 18

API: Collection Factories n Achtung: n unveränderbar (sog. immutable) n keine null-werte n zufällige Iterationsreihenfolge von einer Ausführung zur nächsten 19

API: Reactive Streams n beteiligte Akteure n Producer: n produziert Items n nimmt Anmeldungen der Subscriber entgegen n Subscriber: n meldet sich beim Producer an n implementiert die Methoden onnext(), onerror() und oncomplete() n Subscription n stellt die Verbindung zwischen Producer und Subscriber dar n implementiert die Methoden request() und cancel() 20

API: Reactive Streams n Ablauf "Subscribing" n Publisher pub wird erzeugt n Subscriber sub wird erzeugt n werden mit Aufruf pub.subscribe(sub) verhängt n Publisher erzeugt Subscription script n Publisher ruft sub.onsubscription(script) auf n Subscriber kann sich die Subscription merken 21

API: Reactive Streams n Ablauf "Streaming" n Subscriber ruft script.request(10) auf n Publisher ruft sub.onnext(item) auf [max. 10mal] n Ablauf "Canceling" n Publisher kann sub.onerror() oder sub.oncomplete() aufrufen n Subscriber kann script.cancel() aufrufen n bisher (d.h. Java SE 9) n nur Schnittstellen definiert n noch nicht im JDK genutzt 22

JVM: Multi-Release JAR n Beispiel: n Code für Java SE 8 public class Version { public String get() { return "Java SE 8"; n Code für Java SE 9 public class Version { public String get() { return "Java SE 9"; 23

JVM: Multi-Release JAR n gemeinsamer Code public class Main { public static void main(string[] args) { System.out.println(new Version().get()); n Kompilation der Java-Dateien: n Klasse Main und Klasse Version für Java SE 8 --> Verzeichnis bin/java8 n Klasse Version für Java SE 9 --> Verzeichnis bin/java9 24

JVM: Multi-Release JAR n "Multi-Release JAR"-Datei erzeugen n neue Kommandozeilenoption: --release n Beispiel für Aufruf: jar --create --file dist/multirelease.jar -C bin/java8. --release 9 -C bin/java9. 25

JVM: Multi-Release JAR n Verzeichnisstruktur in der "Multi-Release JAR"-Datei: - org - company - Main.class - Version.class - META-INF - versions - 9 - org - company - Version.class 26

JVM: Multi-Release JAR n Aufruf zum Programmstart java jar dist/multirelease.jar org.company.main n Output (mit JRE, Version 8): > Java SE 8 n Output (mit JRE, Version 9): > Java SE 9 27

JVM: weitere Features n neuer Version-String javac version > javac 9.0.1 java version > java version "9.0.1" n neue und ergänzte Kommandozeilen-Optionen im GNU-Stil: cp -classpath --class-path 28

Performance: java.lang.string im Memory n Werttyp char: 2 Byte (UTF-16 Code Unit) n in Texten meist nur ISO-8859-1: 1 Byte (ASCII / EBCDIC) n Referenztyp java.lang.string intern: char[] -> byte[] n Benchmark-Test (von Aleksey Shipilëv): 1.4mal mehr Durchsatz 1.85mal weiniger Garbage 29