Praktikum aus Softwareentwicklung 2 Neues ab JDK 1.5 Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2009 – [email protected] 1 Praktikum aus Softwareentwicklung 2 Java 5 - Tiger • • • • New Features – Timeline, Überblick Java Spracherweiterungen – Enums, For Loop, .. Java API – StringBuilder, Formatter Sonstiges Java Praktikum – SS 2009 – [email protected] 2 Praktikum aus Softwareentwicklung 2 J2SE Plattform Versionen Timeline Aktuelle Versionen: • JDK 1.4.2_12 • JDK 5 Update 15 • JDK 6 Update 12 • JDK 7 voraussichtlich 2009 Java Praktikum – SS 2009 – [email protected] 3 Praktikum aus Softwareentwicklung 2 Java SE 6 Übersicht Java Praktikum – SS 2009 – [email protected] 4 Praktikum aus Softwareentwicklung 2 Java 5 Erweiterungen • Sprache – – – • Standard Bibliotheken – – – – • Generics Aufzählungstyp (enums) Metainformation (annotations) Unicode 4.0 Collections Framework Nebenläufigkeit (Threads) Monitoring… Java Virtual Machine – Performanz Java Praktikum – SS 2009 – [email protected] 5 Praktikum aus Softwareentwicklung 2 Java 5 • • • • New Features – Timeline, Überblick Java Spracherweiterungen – Enums, For Loop, Generics, … Java API – StringBuilder, Formatter Sonstiges Java Praktikum – SS 2009 – [email protected] 6 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Typesafe Enumerations (1/4) • Konstante als Aufzählungstypen – • public final static int FORM_FIELD_COLOR_BLUE = 0; public final static int FORM_FIELD_COLOR_RED = 1; public final static int FORM_FIELD_COLOR_GREEN = 2; Nachteile – – – – Verwendung nicht typsicher Umständliche Namensgebung Erweiterung ist problematisch Kein Informationsgehalt Java Praktikum – SS 2009 – [email protected] 7 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Typesafe Enumerations (2/4) class Form { class Field { enum Color { BLUE, RED, GREEN }; … Color fontColor = BLUE; … • Namensbereiche durch innere Typen ● • Form.Field.Color Enums entsprechen Klassen ● BLUE,RED,GREEN - globale Objekte vom Typ Color ● Können Konstruktoren und Methoden besitzen Java Praktikum – SS 2009 – [email protected] 8 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Typesafe Enumerations (3/4) enum Color { BLUE (0x00,0x00,0xFF), RED (0x00,0xFF,0x00), GREEN(0xFF,0x00,0x00); int r,g,b; Color(int r, int g, int b) {…} … } • • Initialisierung durch Konstruktor Methoden und Members wie bei Klassen Java Praktikum – SS 2009 – [email protected] 9 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Typesafe Enumerations (4/4) • Vergleich mit == möglich – • Werte-Bezeichner auch als String verfügbar – • Color c = Color.valueOf("RED"); if ("RED".equals(c.toString()) {…} Verfügbare Werte abfragbar – • Color c = Color.RED; if (c == Color.RED) {…} switch(c) { case RED: … } Color[] all = Color.values(); java.lang.Enum Java Praktikum – SS 2009 – [email protected] 10 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Autoboxing/Unboxing (1/2) • Automatische Umwandlung von primitiven Datentypen in ihre Wrapper Klassen: – Integer > int > Integer – Double > double > Double • Ohne Autoboxing – int x = 123, z; Integer y; y = Integer.valueOf(x); z = y.intValue(); • Mit Autoboxing – y = x; z = y; Java Praktikum – SS 2009 – [email protected] 11 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Autoboxing/Unboxing (2/2) • • Umwandlung übernimmt der Compiler Achtung, NullPointerExceptions möglich: – • Integer a = null; int b = a; // Bumm! Unboxing NullPointerException weil: – Integer a = null; int b = a.valueOf(); Java Praktikum – SS 2009 – [email protected] 12 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Generics (1/4) • Spezielle Typ-Parameter für Klassen/Interfaces und Methoden – Typsicherheit – Vermeidung von type-casts • interface Observable { public void update(Object arg){…} } • interface Observable<T> { public void update(T arg){…} } • Lesen als: „Observable vom Typ T“ Java Praktikum – SS 2009 – [email protected] 13 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Generics (2/4) • • • • Verwendung im Collections Framework ArrayList list = new ArrayList(); list.add("ein string…"); String s = (String)list.get(0); ArrayList<String> list = new ArrayList<String>(); String s = list.get(0); HashMap<Integer,String> map; int userID = 123; map.put(userID, "hans im glück"); Java Praktikum – SS 2009 – [email protected] 14 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Generics (3/4) • Typisieren von Methoden, zum Beispiel ein Setter: – Parameter soll mindestens vom Typ PasswordObserver sein, und Parameter soll das Interface Observable<User> implementieren <T extends PasswordObserver & Observable<User>> void set(T observer) {…} – • Java Praktikum – SS 2009 – [email protected] 15 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Generics (4/4) • Exakter Type-check bei Parametern – • findUsers(Collection<User> users) Wildcards – Upper Bound findUsers( Collection<? extends User> users) – Lower Bound findUsers( Collection<? super Administrator> users) Java Praktikum – SS 2009 – [email protected] 16 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Enhanced For Loop (1/3) try { ArrayList users; users.add(aUser); … Iterator it = users.iterator(); while (it.hasNext()) { String u = (User) it.next(); …; } } catch (ClassCastException ce) { ce.printStackTrace(); } Java Praktikum – SS 2009 – [email protected] 17 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Enhanced For Loop (2/3) • Compiler übernimmt – – – – Generieren des Iterators Lesen vom Iterator Typ Überprüfung Prüfung auf Listenende • ArrayList<User> users; for (User u : users) { … } • Nicht mehr notwendig: try ... catch(ClassCastException e)... Java Praktikum – SS 2009 – [email protected] 18 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Enhanced For Loop (3/3) • Funktioniert auch für Arrays int[] numbs = {10,20,30,40,50}; for (int x : numbs) { System.out.println(x); } • Wird übersetzt zu: for (int g=0; g < numbs.length; g++) { int x = numbs[g]; System.out.println(x); } Java Praktikum – SS 2009 – [email protected] 19 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Annotation • • • • Metainformation im Programmkode Verarbeitung durch – Compiler – Tools – Zur Laufzeit Package java.lang.annotation Beispiele: – JAX-WS (SOAP Stack von Sun) – JUnit 4 Java Praktikum – SS 2009 – [email protected] 20 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Static Import (1/2) • • Import von statisch definierten – Variablen – Klassen – Enums Analog zu Package Import – import static java.lang.Math.PI; – import static java.lang.Math.*; Java Praktikum – SS 2009 – [email protected] 21 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Static Import (2/2) • Beispiel: import java.lang.Math; double x = Math.PI; double y = Math.cos(Math.PI/2d – x); • import static java.lang.Math.*; double x = PI; double y = cos(PI/2d – x); Java Praktikum – SS 2009 – [email protected] 22 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Varargs (1/2) • • • Um an eine Methode eine variable Anzahl von Parametern zu übergeben, musste man bisher ein Array verwenden Arrays mit unterschiedlichen Typen nur als Object Funktionalität printf wie in C/C++ ist nicht möglich // Bisher public static void printem(String x[]) { for (int t=0;t<x.length;++t) { System.out.println(x[t]); } } ... printem(new String[] {"bob","fred","joe"}); Java Praktikum – SS 2009 – [email protected] 23 Praktikum aus Softwareentwicklung 2 Java Spracherweiterungen Varargs (2/2) // Neu public static void printem(String... x) { for (String s : x) { System.out.println(x); } } public static void main(String args[]) { // JDK1.5 style printem("bob","fred","joe"); //JDK1.4 style printem(new String[] {"bob","fred","joe"}); Java Praktikum – SS 2009 – [email protected] 24 Praktikum aus Softwareentwicklung 2 Java 5 • • • • New Features – Timeline, Überblick Java Spracherweiterungen – Enums, For Loop, .. Java API – StringBuilder, Formatter Sonstiges Java Praktikum – SS 2009 – [email protected] 25 Praktikum aus Softwareentwicklung 2 Java API News StringBuilder • • StringBuilder als Alternative zu StringBuffer – java.lang.StringBuilder – Zum Verketten von Strings StringBuilder – Eigenschaften und Schnittstelle wie StringBuffer StringBuilder sbuilder = new StringBuilder(); sbuilder.append("Plz.: ").append(4040)…; • Nicht thread safe, dafür bessere Performanz! – StringBuffer NICHT mehr verwenden • Ausnahme: gleichzeitige Verwendung von mehreren Threads Java Praktikum – SS 2009 – [email protected] 26 Praktikum aus Softwareentwicklung 2 Java API News Exception Handling • Zugriff auf aktuellen Laufzeit-Stack – – – • Thread.currentThread().getStackTrace(); Thread.getAllStackTraces(); Verwendung für Statistiken, Ausgabeformatierung… Standard Implementierung für unbehandelte Exceptions – Thread.setDefaultUncaughtExceptionHandler( myDefaultHandler); – Verwendung für spezifisches Logging Keine Exceptions werden "übersehen" – Java Praktikum – SS 2009 – [email protected] 27 Praktikum aus Softwareentwicklung 2 Java API News Formatted Output (1/2) • Vorbild ist Ausgabe Formatierung von C/C++ – • sprintf(Format String , Daten …); Beispiel: String firstName = "Albert"; String lastName = "Einstein"; Date date = new Date(); String presentation = "%1$td.%1$tm.%1$tY - Vorname: %2$-20s Nachname: %3$-20s"; … String.format(presentation, date, firstName, lastName); System.out.printf(presentation, date, firstName, lastName); Java Praktikum – SS 2009 – [email protected] 28 Praktikum aus Softwareentwicklung 2 Java API News Formatted Output (2/2) • Implementiert in java.util.Formatter – • Konstruktoren für flexible Ausgabeziele und Zeichenkodierungen – • Formatierungsmöglichkeiten siehe Java Doc Streams, Files, java.lang.Appendable Beispiel FileOutputStream out; … Formatter formatter = new Formatter(out,"UTF-8"); formatter.format("PI = %12.10f", Math.PI); out.close(); Java Praktikum – SS 2009 – [email protected] 29 Praktikum aus Softwareentwicklung 2 Java API News Formatted Input • Text Scanner – java.util.Scanner – Parser für primitive Typen und Strings • Konstruktoren für flexible Quellen und Zeichenkodierungen – Streams, Reader, Files, Strings – Scanner s = new Scanner(Quelle); int val = s.nextInt(); … s.close(); • Vergleiche auch – String[] tokens = "aaa bbb ccc".split(regular expression); Java Praktikum – SS 2009 – [email protected] 30 Praktikum aus Softwareentwicklung 2 Java API News Management (1/2) • Interface für Zugriff auf Daten für Monitoring import java.lang.management.*; import java.util.*; import javax.management.*; public class MemTest { public static void main(String args[]) { List<java.lang.management.MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans(); for(MemoryPoolMXBean p: pools) { System.out.println("Memory type=" + p.getType()); System.out.println("Memory usage=" + p.getUsage()); Java Praktikum – SS 2009 – [email protected] 31 Praktikum aus Softwareentwicklung 2 Java API News Management (2/2) • • Monitor Tool: jconsole Aktivierung für JVM -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=9999 Java Praktikum – SS 2009 – [email protected] 32 Praktikum aus Softwareentwicklung 2 Java 5 • • • • New Features – Timeline, Überblick Java Spracherweiterungen – Enums, For Loop, .. Java API – StringBuilder, Formatter Sonstiges Java Praktikum – SS 2009 – [email protected] 33 Praktikum aus Softwareentwicklung 2 Java 5 Erweiterungen Java Virtual Machine • Java Heap Self Tuning – • Class Data Sharing – – – – • (Selbst)-Einstellung des Heap wurde optimiert (Performance und Speicherverbrauch) Soll Startzeit bei kleinen Applikationen reduzieren Teile der Standardbibliotheken werden in ein Memory-MappedFile ausgelagert jre\bin\client\classes.jsa MMF wird zwischen mehreren VM‘s geteilt Garbage Collector Ergonomics – – Parallele Garbage Collector verbessert Big Size Verbesserungen, besseres adaptives Verhalten Java Praktikum – SS 2009 – [email protected] 34 Praktikum aus Softwareentwicklung 2 Java 5 Erweiterungen Core Libraries (1/2) • Network – • Internationalisierung – • Timeout (Protocoll Handler), InetAddress ping, Framework für File Caching Unicode 4.0, Vietnam Locale Formatter – (java.util) Interpreter Klasse für printf-Style Format Strings String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", calendar); -> s == "Duke's Birthday: May 23, 1995" Java Praktikum – SS 2009 – [email protected] 35 Praktikum aus Softwareentwicklung 2 Java 5 Erweiterungen Core Libraries (2/2) • • • • • Collections – 3 neue Interfaces (Queue, BlockingQueue, ConcurrentMap) – Einige neue Algorithmen Monitoring, Managment, Instrumentation Concurrency Utilities Bit Manipulation Operations http://java.sun.com/j2se/1.5.0/docs/relnotes/feat ures.html Java Praktikum – SS 2009 – [email protected] 36 Praktikum aus Softwareentwicklung 2 Ende der 2. Übung Java Praktikum – SS 2009 – [email protected] 37