Java 5

Werbung
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
Herunterladen