Neues ab JDK 1.5 Praktikum aus Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 1
Java 5 - Tiger New Features Timeline, Überblick Enums, For Loop,.. Java API StringBuilder, Formatter Sonstiges Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 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 Gerald.Ehmayer@borland.com 3
Java SE 6 Übersicht Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 4
Java 5 Erweiterungen Sprache Generics Aufzählungstyp (enums) Metainformation (annotations) Standard Bibliotheken Unicode 4.0 Collections Framework Nebenläufigkeit (Threads) Monitoring Java Virtual Machine Performanz Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 5
Java 5 New Features Timeline, Überblick Enums, For Loop, Generics, Java API StringBuilder, Formatter Sonstiges Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 6
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 Typesafe Enumerations (1/4) Verwendung nicht typsicher Umständliche Namensgebung Erweiterung ist problematisch Kein Informationsgehalt Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 7
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 Gerald.Ehmayer@borland.com 8
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 Gerald.Ehmayer@borland.com 9
Typesafe Enumerations (4/4) Vergleich mit == möglich Color c = Color.RED; if (c == Color.RED) { } switch(c) { case RED: } Werte-Bezeichner auch als String verfügbar Color c = Color.valueOf("RED"); if ("RED".equals(c.toString()) { } Verfügbare Werte abfragbar Color[] all = Color.values(); java.lang.enum Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 10
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 Gerald.Ehmayer@borland.com 11
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 Gerald.Ehmayer@borland.com 12
Spezielle Typ-Parameter für Klassen/Interfaces und Methoden Typsicherheit Generics (1/4) 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 Gerald.Ehmayer@borland.com 13
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 Gerald.Ehmayer@borland.com 14
Typisieren von Methoden, zum Beispiel ein Setter: Parameter soll mindestens vom Typ PasswordObserver sein, und Parameter soll das Interface Observable<User> implementieren Generics (3/4) <T extends PasswordObserver & Observable<User>> void set(t observer) { } Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 15
Exakter Type-check bei Parametern findusers(collection<user> users) Wildcards Generics (4/4) Upper Bound findusers( Collection<? extends User> users) Lower Bound findusers( Collection<? super Administrator> users) Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 16
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 Gerald.Ehmayer@borland.com 17
Compiler übernimmt Generieren des Iterators Lesen vom Iterator Typ Überprüfung Enhanced For Loop (2/3) Prüfung auf Listenende ArrayList<User> users; for (User u : users) { } Nicht mehr notwendig: try... catch(classcastexception e)... Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 18
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 Gerald.Ehmayer@borland.com 19
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 Gerald.Ehmayer@borland.com 20
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 Gerald.Ehmayer@borland.com 21
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 Gerald.Ehmayer@borland.com 22
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 Gerald.Ehmayer@borland.com 23
// Neu Varargs (2/2) 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 Gerald.Ehmayer@borland.com 24
Java 5 New Features Timeline, Überblick Enums, For Loop,.. Java API StringBuilder, Formatter Sonstiges Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 25
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 Gerald.Ehmayer@borland.com 26
Zugriff auf aktuellen Laufzeit-Stack Thread.currentThread().getStackTrace(); Thread.getAllStackTraces(); Verwendung für Statistiken, Ausgabeformatierung Standard Implementierung für unbehandelte Exceptions Java API News Exception Handling Thread.setDefaultUncaughtExceptionHandler( mydefaulthandler); Verwendung für spezifisches Logging Keine Exceptions werden "übersehen" Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 27
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 Gerald.Ehmayer@borland.com 28
Java API News Formatted Output (2/2) Implementiert in java.util.formatter Formatierungsmöglichkeiten siehe Java Doc Konstruktoren für flexible Ausgabeziele und Zeichenkodierungen 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 Gerald.Ehmayer@borland.com 29
Text Scanner Java API News Formatted Input 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 Gerald.Ehmayer@borland.com 30
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 Gerald.Ehmayer@borland.com 31
Monitor Tool: jconsole Java API News Management (2/2) 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 Gerald.Ehmayer@borland.com 32
Java 5 New Features Timeline, Überblick Enums, For Loop,.. Java API StringBuilder, Formatter Sonstiges Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 33
Java Heap Self Tuning Java 5 Erweiterungen Java Virtual Machine (Selbst)-Einstellung des Heap wurde optimiert (Performance und Speicherverbrauch) Class Data Sharing Soll Startzeit bei kleinen Applikationen reduzieren Teile der Standardbibliotheken werden in ein Memory-Mapped- File 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 Gerald.Ehmayer@borland.com 34
Java 5 Erweiterungen Core Libraries (1/2) Network Timeout (Protocoll Handler), InetAddress ping, Framework für File Caching Internationalisierung 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 Gerald.Ehmayer@borland.com 35
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 Gerald.Ehmayer@borland.com 36
Ende der 2. Übung Java Praktikum SS 2009 Gerald.Ehmayer@borland.com 37