SlideShare ist ein Scribd-Unternehmen logo
Was ist neu in Java 6, 7, 8, ...  Arne Bachmann Simulations- und Softwaretechnik Deutsches Zentrum für Luft- und Raumfahrt KP SC-VK 07.10.2008
Historischer Überblick JDK 1.0 (1996-01-23) Highlights JDK 1.1 (1998-02-19) Inner classes, JDBC, RMI J2SE 1.2  Playground  (1998-12-08) Collections, J2EE beta, JIT J2SE 1.3  Kestrel  (2000-05-08) Hotspot JVM, JNDI, JPDA J2SE 1.4  Merlin  (2002-02-06) assert , REs, Webstart, XML J2SE 5.0  Tiger  (2004-09-30) Annotations, enum, Generics Java SE 6  Mustang  (2006-12-11) JDBC4, Scripting, div. APIs Java SE 6 Update 10 (2008) Better end user experience Java SE 7  Dolphin  (2009) Dyn. lang. support, multi-core Java SE 8 … Closures?
Historischer Überblick Benennungsschema Alle Versionen ab JDK 1.2 hießen  Java 2 Rückwirkend mit Java 1.5.0 wurden 1.2 - 1.5 in J2SE  x  umbenannt Ab Java SE 6 sollen keine Codenamen mehr genutzt werden Entwicklungsprozess 1998: JCP (Java community process) und JSRs (215: JCP 2.6) Mai 2006: Rich Green (Sun) spricht von Java als Open Source 13. November 2006: Sun veröffentlicht erste Quellen unter GPLv2 8. Mai 2007: Alle Klassen-Bibliotheken veröffentlicht 2007: JRE 6 wird veröffentlicht (das JDK kam 2006) Mai 2007: OpenJDK TM  startet, wird JDK 7 mit binären „plugs“ sein
Ältere interessante Features J2SE 1.2: Das  strictfp  keyword public strictfp class Example1 { float calculate(float x) { return x / 13.333f; } } // oder public class Example2 { strictfp float calculate(float x) { return x / 13.333f; } }
Ältere interessante Features J2SE 1.4: Das  assert  keyword für Pre-/Postconditions oder Invarianten Start der JVM mit  java -enableassertion TestClass (standardmäßig nicht aktiviert = Produktionsbetrieb) class TestClass { void someStupidMethod(final String a) { assert a != null; assert a.length() == 1: "nicht 1 Zeichen"; System.out.println(a); } }
Ältere interessante Features J2SE 5.0:  static import  um das  Constant Interface Antipattern  zu vermeiden: Auto-(un)boxing // import static java.lang.Math.*; import static java.lang.Math.PI; double r = cos(PI * theta);  int i = new Integer(2); // unboxing Float f = 3.5f; // boxing Vector<Long> vl = new Vector<Long>(); vl.add(0l);
Ältere interessante Features J2SE 5.0: Variable Argumentenzahl (= syntaktischer Zucker für Arrays) int min(int firstArg, int... remainingArgs) { int min = firstArg; for (int arg: remainingArgs) { if (arg < min) { min = arg; } } return min; } // Anwendung: x = min(2,1); y = min(2,1,3); z = min(2,1,4,0,7,4,5,5,5,8,2,4);
Java SE 6 java.lang.String.isEmpty java.util.{NavigableMap,  NavigableSet} java.util.concurrent.ConcurrentNavigableMap higherKey, higherEntry pollFirstEntry descendingKeySet if( !randWord.isEmpty() ) { // no &quot;length&quot; check /*do something */ }
Java SE 6 JVM Neue  class file version  50.0 (JSR 202)  0xCAFEBABE , schneller type checking verifier  (zweigeteilt, inspiriert von Java ME) Neue Tools im JDK Java DB  Derby  (nur 2MB, default Standalone-DB) Rhino 1.6r2 JavaScript engine direkt dabei Profiling und Problemsuche Monitoring + Management-Tools ohne Neustart der JVM nutzen jconsole, jps, jmap, jstack, neu: jhat Performance von Java wächst stetig, für Desktop und Server
Java SE 6 Desktop Performanz Grafik: Danny Coward (2007)
Java SE 6 Server Performanz Grafik: Danny Coward (2007)
Java SE 6 APIs Java API for XML Web Services (JAX-WS, JSR 224) for Java EE Spec Lead (2003): Roberto Chinnici (Sun Microsystems, Inc.) Maintenance Lead (heute): Jitendra Kotamraju (Sun) Erzeugen der WS-Klassen mit  wsgen –cp . CircleFunction @WebService public class CircleFunction { public double getArea(final double r) { return java.lang.Math.PI * (r * r); } public static void main(String[] args) {  Endpoint.publish( &quot;http://localhost:8080/&quot; + &quot;WS/function&quot;, new CircleFunction()); } }
Java SE 6 APIs Scripting for the Java Platform (JSR 223), ursprünglich für Java EE Spec Lead (2003-2006): Mike Grogan (Sun Microsystems, Inc.) Mindestens 25 (java.net) + 10 (sonstige) Script-Engines, u. a. BeanShell, CajuScript, Jelly, Python, Sleep ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine js = factory.getEngineByName(&quot; JavaScript &quot;); js.put(&quot;myVariable&quot;, 100); js.eval(&quot;print('Hello, World ' + String(myVariable))&quot;);
Java SE 6 APIs JDBC 4.0 (JSR 221) Spec Lead (2003 - 2006): Lance Andersen (Sun) Auto-loading der Treiberklassen (kein  Class.forName()  mehr) Neue SQLException Unterklassen (inkl. Iterable Interface) National Character Sets (NCHAR, (LONG)NVARCHAR, NCLOB) BLOB/CLOB support, RowID support (wie in DB2 + Oracle) SQL Annotationen für Java-Methoden, siehe Beispiel: interface ABQuery extends BaseQuery { @Select(sql = &quot;SELECT * from table where a = ?1 and b = ?2&quot;) DataSet<LoanApplication> getAB(String A, String B); }
Java SE 6 APIs GUI JTable sortieren und filtern (statt z. B. GlazedLists) Splash screen vor dem Laden der JVM per CL oder Manifest Native TrayIcon Unterstützung Bessere Drag'n'Drop Fähigkeiten (Drop Actions) Monitoring & Management (JMX 1.0: JSR 3) Spec Lead (1998 - 2006): Eamonn McManus (Sun) Neu: Attach on demand Viele Security enhancements, z. B. XML Digital Signature API (JSR 105) Kerberos integration Smartcard API (JSR 268)
Java SE 6 APIs Java Compiler API (JSR 199)  javax.tools Spec Lead (2002): Neal Gafter (Microsoft) Spec Lead (2006): Peter von der Ahe (Sun) Pluggable Annotation Processing API (JSR 269) Spec Lead (2005 - heute): Joseph &quot;Joey&quot; D. Darcy (Sun) Standardisierung des Annotation- Processing  im Gegensatz zur Annotations definition  in J2SE 5 (JSR 175) Hilfreich für Metaprogramming-Tools
Java SE 6 APIs Java Architecture for XML Binding (JAXB) 2.0 (JSR 222) Spec Lead (2003): Sekhar Vajjhala (Sun) Spec Lead (heute): Kohsuke Kawaguchi (Sun) Streaming API for XML (JSR 173) Spec Lead (2002): Christopher Fry (BEA) Spec Lead (heute): Larry Cable (BEA) & Thorick Chow (BEA) Common Annotations for the Java Platform (JSR 181) Spec Lead (2004-2006): Rajiv Mordani (Sun)
Java SE 6 Update 10 &quot;Consumer JRE&quot;-Release Startet schneller (lädt gefüllten Cache vor dem Start) Besseres Installations-&quot;Gefühl&quot; Modular: Java &quot;Kernel&quot; = minimaler Satz von Bibliotheken Reicht für &quot;Hallo Welt&quot; Download und Installation von Rest wenn benötigt Neue Applet-Technologie: Direkt auf Desktop ziehbar = Widget
Java SE 6 Update 10 Grafik: Danny Coward (2007)
Java SE 6 Update 10 Grafik: Danny Coward (2007)
Java SE 7 enum-Werte definierbar: switch/case  über String-Literale: enum Typ { eins (1), drei (3), zehn (10); } switch (answer.toLowerCase()) { case &quot;yes&quot;: /* code */ case &quot;no&quot;: /* error */ }
Java SE 7 APIs Unterstützung von dynamisch typisierten Sprachen in JVM (JSR 292) Spec Lead (2006): Gilad Bracha Spec Lead (heute): Danny Coward Neuer Bytecode  invokedynamic Evtl. mitgeliefert: BeanShell (JSR 274), Groovy, JRuby, Jython Java FX TM  Script -> Eigener TechTalk?
Java SE 7 APIs Neue Version: JMX 2.0 (JSR 255) Spec Lead (2004 - heute): Eamonn McManus (Sun) Namespaces &quot;Federated JMX technology servers&quot; Web Services Connector for JMX Agents (JSR 262) Spec Lead (2004 - heute): Eamonn McManus (Sun) Grafik: Sun JSR
Java SE 7 Modularisierung Improved modularity support (JSR 294) Spec Lead (2006): Gilad Bracha Spec Lead (heute): Alex Buckley (Sun) Führt u. a. zu Änderungen an der Klassendateiendefinition superpackage de.dlr.test { // super-package exports: export de.dlr.test.Class1; export de.dlr.test.doc.*; // super-package members: member de.dlr.test.Class1; member de.dlr.test.doc.* member de.dlr.test.secret.*; }
Java SE 7 Modularisierung Java Module System (JSR 277, hängt von JSR 294 ab) Spec Lead (2005): Stanley M. Ho (Sun) Spec Lead (heute): Stanley M. Ho & Alex Buckley (Sun) Features: JAR wird erweitert zu JAM (Java Module) und enthält Abhängigkeiten (Name + Version) Erweiterbare Metadaten (z. B. Name, Main-Klasse, Members, Export, Import = Abhängigkeit) Lokale Repositories für jedes Java-System/Nutzer-Login Repositories unterschieden in  global ,  Application- ,  URL- Security (signing) ähnlich zu JARs Kompatibilität der Abhängigkeiten zu gewöhnlichen JARs
Java SE 7 GUI Swing Application Framework (JSR 296) Spec Lead (2006 - heute): Hans Muller (Sun) Lebenszyklus einer Swing Applikation (z. B. ExitListener mit Veto) Action-Manager ( @Action ) Resource Management (+ Convention over Configuration) Data injection ( @Resource ) Task < SwingWorker < Future TaskService, TaskMonitor Storage / Session state (per XML, per User)
Java SE 7 Concurrency utilities update (JSR 166y) Spec Lead (2002 - 2004): Doug Lea Ursprünglich in J2SE 5 eingeführt, in x- und y-Versionen erweitert Ermöglicht einfache Nutzung von Multicore-Rechnern Fork/Join Worker thread-Pool Work-stealing Grafik: Doug Lea
Java SE 7 Beans binding (JSR 295) Spec Lead (2006 - heute): Scott Violet (Sun) Anwendungsgebiet beispielsweise: Swing-Properties binden Konverter ermöglichen Typumwandlung
Java SE 7 Bean validation (JSR 303) Spec Lead (2006): Jason Carreira Spec Lead (heute): Emmanuel Bernard (Red Hat Middleware LLC) JSR 303 bietet Annotations- und Validierklassen für validierende Annotationen (!), z. B.  @NotNull Custom constraints mit  Validator<T> Auch für  java.util.{Collection, Set, List, Map}
Java SE 7 Annotations on Java Types (JSR 308) Spec Lead (2006): Michael Ernst & Danny Coward (Sun) Spec Lead (heute): Alex Buckley (Sun) & Michael Ernst @NonNull @ReadOnly @Interned @Tainted @Mutable Map<@NonNull String, @NonEmpty List<@Readonly Document>> files; void monitorTemperature() throws @Critical TemperatureException{};
Java SE 7 More new I/O APIs for the Java Platform (JSR 203)  java.nio Spec Lead (2003):  Mark Reinhold (Sun) Spec Lead (heute): Alan Bateman (Sun) Änderungen im Dateisystem verfolgen Sicherheitsattribute (ACLs, Dateiberechtigungen) Symbolische Links Path, Directory, Visitors
Java SE 7 Enterprise Beans 3.0 (JSR 220) Spec Lead (2003):  Linda DeMichiel (Sun) Spec Lead (2007): Linda DeMichiel & Michael Keith (Oracle) Javadoc TM  Tag Technology Update (JSR 260) Spec Lead (2004):  Denis Mikhalkin (Sun) & Amy Fowler (Sun) & Kathy Walrath (Sun) Spec Lead (heute): Danny Coward (Sun) seit 1995 fast unverändert Einbetten von Beispielen und Anwendungsfällen Semantischer Index von Klassen und Packages
Java SE 7 Date and Time API (JSR 310) Spec Lead (2007 - heute): Stephen Colebourne (Google) & Michael Nascimento Santos (Sun) Dritter Versuch nach Date (JDK 1.1) und Calendar (JDK 1.4) Definiert  Instant, Interval, Duration Matchers, Adjusters, Resolvers Fußt auf ISO 8601 (XML), um Zeitzonen ergänzt Existierende Klassen wie  util.Date ,  sql.Date  und  sql.Time  sollen neue Interfaces implementieren, nicht  deprecated  werden Todo: Periods, Formatting, Parsing
Java SE 7 Units specification (JSR 275, nur Java SE)  javax.measure Spec Lead (2005):  Steve Metsker (CapTech Ventures) Spec Lead (heute): Jean-Marie Dautelle & Werner Keil Quantity ( λ ), Dimension (nm), Measure (10), Unit (Wellenlänge) Typsicher und beliebig erweiterbar Datenbank mit Unterstützung von ISO 1000, ISO 31 (BIPM), NIST class Person { void setWeight(Measurable<Mass> weight); } double weightInKg = weight.doubleValue(KILOGRAM); // Oder lb. double weightInLiter = weight.doubleValue(LITER); // Error!
Java SE 7, 8, … Mögliche Spracherweiterungen Array-Syntax für Collections erlaubt (wie in Scriptsprachen) Property-Literale (genaue Syntax diskutierbar) Automatische Typ-Ermittlung durch den Compiler List content = new LinkedList(10); Content[1] = &quot;Hallo&quot;; Point p = new Point(); p->X = 56; final map = new HashMap<String, Integer>(); // oder map := new HashMap<String, Integer>();
Java SE 7, 8, … Mögliche Spracherweiterungen Factory-Methoden für Typisierung per Unterklasse BigInteger-Operationen endlich voll unterstützt / überladen Operator-Überladen, wie beispielsweise aus C++ bekannt für BigInteger bereits angedeutet, auch für Enums geplant Closures Lead: Neal Gafter (Microsoft, früher Sun + Google) Veto durch Joshua Bloch (Google, früher Sun) Foo f2 = Foo.new(SubclassOfFoo.class, 1, 2); BigInteger bi = new BigInt(&quot;1&quot;) + new BigInteger(&quot;1&quot;);
Java SE 7, 8, … Mögliche Spracherweiterungen XML Integration in Java Mehrere Exceptions in einer Anweisung fangen: Entspricht einem  return  mit variablen Typ } catch (IOException, NullPointerException io_or_npe) { feature.add( <reviewed> <who>{ reviewer }</who>; <when>{ dc.encode(time) }</when>; </reviewed> );
Quellen JDK 1.0 – J2SE 5.0 Java – Geschichte http://www.java.com/en/javahistory/timeline.jsp http://en.wikipedia.org/wiki/Java_version_history http://en.wikipedia.org/wiki/Java_Community_Process http://openjdk.java.net  ersetzt  http://openjdk.dev.java.net http://www.sun.com/software/opensource/java/faq.jsp http://jcp.org/en/jsr/stage?listBy=final Ältere Features http://en.wikipedia.org/wiki/Strictfp http://java.sun.com/developer/technicalArticles/JavaLP/assertions/ Joshua Bloch (2008): Effective Java, (2nd ed.), Addison Wesley
Quellen Java SE 6 Java SE 6 http://www.tutego.com/java/java-6-mustang-news.htm https://scripting.dev.java.net http://weblogs.java.net/blog/shan_man/archive/2006/02/ choosing_the_dr.html Java SE 6 Update 10 http://java.sun.com/developer/technicalArticles/javase/java6u10/
Quellen Java SE 7 Features http://tech.puredanger.com/java7/ http://www.tutego.com/java/jdk7-Java-SE-7.htm http://www.infoq.com/news/2007/07/concurrency-java-se-7 GUI https://appframework.dev.java.net
Quellen Java SE 8, … http://www.cafeaulait.org/slides/nycjava/java7/Java_7_and_Beyond.html http://wiki.java.net/bin/view/JDK/ClosuresSyntaxInJava7 Sonstiges http://www.sun.com/aboutsun/media/ceo/ Die meisten Portraits stammen von den Blog-Seiten der Spec Leads Wall-E ist von http://www.walle-derfilm.de
Fragen?

Weitere ähnliche Inhalte

PDF
Funktionale Reaktive Programmierung mit Sodium
PDF
Scala - A Scalable Language
PPTX
Real lifefp
PDF
Speeding up Java Persistence
PDF
Einführung in die funktionale Programmierung mit Clojure
PPT
2009 03 17 Spring101
PDF
Feige sein! Testen im Java-EE-Umfeld
PDF
Java EE 5
Funktionale Reaktive Programmierung mit Sodium
Scala - A Scalable Language
Real lifefp
Speeding up Java Persistence
Einführung in die funktionale Programmierung mit Clojure
2009 03 17 Spring101
Feige sein! Testen im Java-EE-Umfeld
Java EE 5

Was ist angesagt? (12)

PDF
Scharfe Anmerkungen für Java 6 mit Lombok
PDF
Testen im EE-Umfeld – Seien Sie feige!
PPT
Regelbasierte Systeme mit JBoss Drools
PPTX
Android Development ...and the daily challenges
PDF
AdvancedTdd
KEY
Mein paralleles Leben als Java-Entwickler
PPTX
Parallele Softwareentwicklung mit .NET 4.0
PPTX
Kata - Java - Tests - JUnit 4
PDF
Mehr Dynamik Durch Skriptsprachen
PDF
Unit testing mit Javascript
PPTX
Java Batch: Der neue Standard für‘s Stapeln
PDF
Nigh Session Scala
Scharfe Anmerkungen für Java 6 mit Lombok
Testen im EE-Umfeld – Seien Sie feige!
Regelbasierte Systeme mit JBoss Drools
Android Development ...and the daily challenges
AdvancedTdd
Mein paralleles Leben als Java-Entwickler
Parallele Softwareentwicklung mit .NET 4.0
Kata - Java - Tests - JUnit 4
Mehr Dynamik Durch Skriptsprachen
Unit testing mit Javascript
Java Batch: Der neue Standard für‘s Stapeln
Nigh Session Scala
Anzeige

Ähnlich wie Was ist neu in Java 6, 7, 8, ... (6)

PPT
Introduction to JEE
PDF
Die Java Plattform Strategie
PDF
Article - JDK 8 im Fokus der Entwickler
PDF
[GER] Lessons learned: Modern JVM Languages besides Java
PDF
Warum empfehle ich meinen Kunden das Spring Framework?
PDF
Javamagazin 1.2016 jdk9_ea_b83_jigsaw
Introduction to JEE
Die Java Plattform Strategie
Article - JDK 8 im Fokus der Entwickler
[GER] Lessons learned: Modern JVM Languages besides Java
Warum empfehle ich meinen Kunden das Spring Framework?
Javamagazin 1.2016 jdk9_ea_b83_jigsaw
Anzeige

Mehr von Andreas Schreiber (20)

PPTX
Provenance-based Security Audits and its Application to COVID-19 Contact Trac...
PPTX
Visualization of Software Architectures in Virtual Reality and Augmented Reality
PPTX
Provenance as a building block for an open science infrastructure
PPTX
Raising Awareness about Open Source Licensing at the German Aerospace Center
PDF
Open Source Licensing for Rocket Scientists
PDF
Interactive Visualization of Software Components with Virtual Reality Headsets
PPTX
Provenance for Reproducible Data Science
PPTX
Visualizing Provenance using Comics
PPTX
Quantified Self Comics
PPTX
Nachvollziehbarkeit mit Hinblick auf Privacy-Verletzungen
PPTX
Reproducible Science with Python
PPTX
Python at Warp Speed
PPTX
A Provenance Model for Quantified Self Data
PPTX
Open Source im DLR
PDF
Tracking after Stroke: Doctors, Dogs and All The Rest
PPTX
High Throughput Processing of Space Debris Data
PDF
Bericht von der QS15 Conference & Exposition
PPTX
Telemedizin: Gesundheit, messbar für jedermann
PDF
Big Python
PDF
Quantified Self mit Wearable Devices und Smartphone-Sensoren
Provenance-based Security Audits and its Application to COVID-19 Contact Trac...
Visualization of Software Architectures in Virtual Reality and Augmented Reality
Provenance as a building block for an open science infrastructure
Raising Awareness about Open Source Licensing at the German Aerospace Center
Open Source Licensing for Rocket Scientists
Interactive Visualization of Software Components with Virtual Reality Headsets
Provenance for Reproducible Data Science
Visualizing Provenance using Comics
Quantified Self Comics
Nachvollziehbarkeit mit Hinblick auf Privacy-Verletzungen
Reproducible Science with Python
Python at Warp Speed
A Provenance Model for Quantified Self Data
Open Source im DLR
Tracking after Stroke: Doctors, Dogs and All The Rest
High Throughput Processing of Space Debris Data
Bericht von der QS15 Conference & Exposition
Telemedizin: Gesundheit, messbar für jedermann
Big Python
Quantified Self mit Wearable Devices und Smartphone-Sensoren

Was ist neu in Java 6, 7, 8, ...

  • 1. Was ist neu in Java 6, 7, 8, ... Arne Bachmann Simulations- und Softwaretechnik Deutsches Zentrum für Luft- und Raumfahrt KP SC-VK 07.10.2008
  • 2. Historischer Überblick JDK 1.0 (1996-01-23) Highlights JDK 1.1 (1998-02-19) Inner classes, JDBC, RMI J2SE 1.2 Playground (1998-12-08) Collections, J2EE beta, JIT J2SE 1.3 Kestrel (2000-05-08) Hotspot JVM, JNDI, JPDA J2SE 1.4 Merlin (2002-02-06) assert , REs, Webstart, XML J2SE 5.0 Tiger (2004-09-30) Annotations, enum, Generics Java SE 6 Mustang (2006-12-11) JDBC4, Scripting, div. APIs Java SE 6 Update 10 (2008) Better end user experience Java SE 7 Dolphin (2009) Dyn. lang. support, multi-core Java SE 8 … Closures?
  • 3. Historischer Überblick Benennungsschema Alle Versionen ab JDK 1.2 hießen Java 2 Rückwirkend mit Java 1.5.0 wurden 1.2 - 1.5 in J2SE x umbenannt Ab Java SE 6 sollen keine Codenamen mehr genutzt werden Entwicklungsprozess 1998: JCP (Java community process) und JSRs (215: JCP 2.6) Mai 2006: Rich Green (Sun) spricht von Java als Open Source 13. November 2006: Sun veröffentlicht erste Quellen unter GPLv2 8. Mai 2007: Alle Klassen-Bibliotheken veröffentlicht 2007: JRE 6 wird veröffentlicht (das JDK kam 2006) Mai 2007: OpenJDK TM startet, wird JDK 7 mit binären „plugs“ sein
  • 4. Ältere interessante Features J2SE 1.2: Das strictfp keyword public strictfp class Example1 { float calculate(float x) { return x / 13.333f; } } // oder public class Example2 { strictfp float calculate(float x) { return x / 13.333f; } }
  • 5. Ältere interessante Features J2SE 1.4: Das assert keyword für Pre-/Postconditions oder Invarianten Start der JVM mit java -enableassertion TestClass (standardmäßig nicht aktiviert = Produktionsbetrieb) class TestClass { void someStupidMethod(final String a) { assert a != null; assert a.length() == 1: &quot;nicht 1 Zeichen&quot;; System.out.println(a); } }
  • 6. Ältere interessante Features J2SE 5.0: static import um das Constant Interface Antipattern zu vermeiden: Auto-(un)boxing // import static java.lang.Math.*; import static java.lang.Math.PI; double r = cos(PI * theta); int i = new Integer(2); // unboxing Float f = 3.5f; // boxing Vector<Long> vl = new Vector<Long>(); vl.add(0l);
  • 7. Ältere interessante Features J2SE 5.0: Variable Argumentenzahl (= syntaktischer Zucker für Arrays) int min(int firstArg, int... remainingArgs) { int min = firstArg; for (int arg: remainingArgs) { if (arg < min) { min = arg; } } return min; } // Anwendung: x = min(2,1); y = min(2,1,3); z = min(2,1,4,0,7,4,5,5,5,8,2,4);
  • 8. Java SE 6 java.lang.String.isEmpty java.util.{NavigableMap, NavigableSet} java.util.concurrent.ConcurrentNavigableMap higherKey, higherEntry pollFirstEntry descendingKeySet if( !randWord.isEmpty() ) { // no &quot;length&quot; check /*do something */ }
  • 9. Java SE 6 JVM Neue class file version 50.0 (JSR 202) 0xCAFEBABE , schneller type checking verifier (zweigeteilt, inspiriert von Java ME) Neue Tools im JDK Java DB Derby (nur 2MB, default Standalone-DB) Rhino 1.6r2 JavaScript engine direkt dabei Profiling und Problemsuche Monitoring + Management-Tools ohne Neustart der JVM nutzen jconsole, jps, jmap, jstack, neu: jhat Performance von Java wächst stetig, für Desktop und Server
  • 10. Java SE 6 Desktop Performanz Grafik: Danny Coward (2007)
  • 11. Java SE 6 Server Performanz Grafik: Danny Coward (2007)
  • 12. Java SE 6 APIs Java API for XML Web Services (JAX-WS, JSR 224) for Java EE Spec Lead (2003): Roberto Chinnici (Sun Microsystems, Inc.) Maintenance Lead (heute): Jitendra Kotamraju (Sun) Erzeugen der WS-Klassen mit wsgen –cp . CircleFunction @WebService public class CircleFunction { public double getArea(final double r) { return java.lang.Math.PI * (r * r); } public static void main(String[] args) { Endpoint.publish( &quot;http://localhost:8080/&quot; + &quot;WS/function&quot;, new CircleFunction()); } }
  • 13. Java SE 6 APIs Scripting for the Java Platform (JSR 223), ursprünglich für Java EE Spec Lead (2003-2006): Mike Grogan (Sun Microsystems, Inc.) Mindestens 25 (java.net) + 10 (sonstige) Script-Engines, u. a. BeanShell, CajuScript, Jelly, Python, Sleep ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine js = factory.getEngineByName(&quot; JavaScript &quot;); js.put(&quot;myVariable&quot;, 100); js.eval(&quot;print('Hello, World ' + String(myVariable))&quot;);
  • 14. Java SE 6 APIs JDBC 4.0 (JSR 221) Spec Lead (2003 - 2006): Lance Andersen (Sun) Auto-loading der Treiberklassen (kein Class.forName() mehr) Neue SQLException Unterklassen (inkl. Iterable Interface) National Character Sets (NCHAR, (LONG)NVARCHAR, NCLOB) BLOB/CLOB support, RowID support (wie in DB2 + Oracle) SQL Annotationen für Java-Methoden, siehe Beispiel: interface ABQuery extends BaseQuery { @Select(sql = &quot;SELECT * from table where a = ?1 and b = ?2&quot;) DataSet<LoanApplication> getAB(String A, String B); }
  • 15. Java SE 6 APIs GUI JTable sortieren und filtern (statt z. B. GlazedLists) Splash screen vor dem Laden der JVM per CL oder Manifest Native TrayIcon Unterstützung Bessere Drag'n'Drop Fähigkeiten (Drop Actions) Monitoring & Management (JMX 1.0: JSR 3) Spec Lead (1998 - 2006): Eamonn McManus (Sun) Neu: Attach on demand Viele Security enhancements, z. B. XML Digital Signature API (JSR 105) Kerberos integration Smartcard API (JSR 268)
  • 16. Java SE 6 APIs Java Compiler API (JSR 199) javax.tools Spec Lead (2002): Neal Gafter (Microsoft) Spec Lead (2006): Peter von der Ahe (Sun) Pluggable Annotation Processing API (JSR 269) Spec Lead (2005 - heute): Joseph &quot;Joey&quot; D. Darcy (Sun) Standardisierung des Annotation- Processing im Gegensatz zur Annotations definition in J2SE 5 (JSR 175) Hilfreich für Metaprogramming-Tools
  • 17. Java SE 6 APIs Java Architecture for XML Binding (JAXB) 2.0 (JSR 222) Spec Lead (2003): Sekhar Vajjhala (Sun) Spec Lead (heute): Kohsuke Kawaguchi (Sun) Streaming API for XML (JSR 173) Spec Lead (2002): Christopher Fry (BEA) Spec Lead (heute): Larry Cable (BEA) & Thorick Chow (BEA) Common Annotations for the Java Platform (JSR 181) Spec Lead (2004-2006): Rajiv Mordani (Sun)
  • 18. Java SE 6 Update 10 &quot;Consumer JRE&quot;-Release Startet schneller (lädt gefüllten Cache vor dem Start) Besseres Installations-&quot;Gefühl&quot; Modular: Java &quot;Kernel&quot; = minimaler Satz von Bibliotheken Reicht für &quot;Hallo Welt&quot; Download und Installation von Rest wenn benötigt Neue Applet-Technologie: Direkt auf Desktop ziehbar = Widget
  • 19. Java SE 6 Update 10 Grafik: Danny Coward (2007)
  • 20. Java SE 6 Update 10 Grafik: Danny Coward (2007)
  • 21. Java SE 7 enum-Werte definierbar: switch/case über String-Literale: enum Typ { eins (1), drei (3), zehn (10); } switch (answer.toLowerCase()) { case &quot;yes&quot;: /* code */ case &quot;no&quot;: /* error */ }
  • 22. Java SE 7 APIs Unterstützung von dynamisch typisierten Sprachen in JVM (JSR 292) Spec Lead (2006): Gilad Bracha Spec Lead (heute): Danny Coward Neuer Bytecode invokedynamic Evtl. mitgeliefert: BeanShell (JSR 274), Groovy, JRuby, Jython Java FX TM Script -> Eigener TechTalk?
  • 23. Java SE 7 APIs Neue Version: JMX 2.0 (JSR 255) Spec Lead (2004 - heute): Eamonn McManus (Sun) Namespaces &quot;Federated JMX technology servers&quot; Web Services Connector for JMX Agents (JSR 262) Spec Lead (2004 - heute): Eamonn McManus (Sun) Grafik: Sun JSR
  • 24. Java SE 7 Modularisierung Improved modularity support (JSR 294) Spec Lead (2006): Gilad Bracha Spec Lead (heute): Alex Buckley (Sun) Führt u. a. zu Änderungen an der Klassendateiendefinition superpackage de.dlr.test { // super-package exports: export de.dlr.test.Class1; export de.dlr.test.doc.*; // super-package members: member de.dlr.test.Class1; member de.dlr.test.doc.* member de.dlr.test.secret.*; }
  • 25. Java SE 7 Modularisierung Java Module System (JSR 277, hängt von JSR 294 ab) Spec Lead (2005): Stanley M. Ho (Sun) Spec Lead (heute): Stanley M. Ho & Alex Buckley (Sun) Features: JAR wird erweitert zu JAM (Java Module) und enthält Abhängigkeiten (Name + Version) Erweiterbare Metadaten (z. B. Name, Main-Klasse, Members, Export, Import = Abhängigkeit) Lokale Repositories für jedes Java-System/Nutzer-Login Repositories unterschieden in global , Application- , URL- Security (signing) ähnlich zu JARs Kompatibilität der Abhängigkeiten zu gewöhnlichen JARs
  • 26. Java SE 7 GUI Swing Application Framework (JSR 296) Spec Lead (2006 - heute): Hans Muller (Sun) Lebenszyklus einer Swing Applikation (z. B. ExitListener mit Veto) Action-Manager ( @Action ) Resource Management (+ Convention over Configuration) Data injection ( @Resource ) Task < SwingWorker < Future TaskService, TaskMonitor Storage / Session state (per XML, per User)
  • 27. Java SE 7 Concurrency utilities update (JSR 166y) Spec Lead (2002 - 2004): Doug Lea Ursprünglich in J2SE 5 eingeführt, in x- und y-Versionen erweitert Ermöglicht einfache Nutzung von Multicore-Rechnern Fork/Join Worker thread-Pool Work-stealing Grafik: Doug Lea
  • 28. Java SE 7 Beans binding (JSR 295) Spec Lead (2006 - heute): Scott Violet (Sun) Anwendungsgebiet beispielsweise: Swing-Properties binden Konverter ermöglichen Typumwandlung
  • 29. Java SE 7 Bean validation (JSR 303) Spec Lead (2006): Jason Carreira Spec Lead (heute): Emmanuel Bernard (Red Hat Middleware LLC) JSR 303 bietet Annotations- und Validierklassen für validierende Annotationen (!), z. B. @NotNull Custom constraints mit Validator<T> Auch für java.util.{Collection, Set, List, Map}
  • 30. Java SE 7 Annotations on Java Types (JSR 308) Spec Lead (2006): Michael Ernst & Danny Coward (Sun) Spec Lead (heute): Alex Buckley (Sun) & Michael Ernst @NonNull @ReadOnly @Interned @Tainted @Mutable Map<@NonNull String, @NonEmpty List<@Readonly Document>> files; void monitorTemperature() throws @Critical TemperatureException{};
  • 31. Java SE 7 More new I/O APIs for the Java Platform (JSR 203) java.nio Spec Lead (2003): Mark Reinhold (Sun) Spec Lead (heute): Alan Bateman (Sun) Änderungen im Dateisystem verfolgen Sicherheitsattribute (ACLs, Dateiberechtigungen) Symbolische Links Path, Directory, Visitors
  • 32. Java SE 7 Enterprise Beans 3.0 (JSR 220) Spec Lead (2003): Linda DeMichiel (Sun) Spec Lead (2007): Linda DeMichiel & Michael Keith (Oracle) Javadoc TM Tag Technology Update (JSR 260) Spec Lead (2004): Denis Mikhalkin (Sun) & Amy Fowler (Sun) & Kathy Walrath (Sun) Spec Lead (heute): Danny Coward (Sun) seit 1995 fast unverändert Einbetten von Beispielen und Anwendungsfällen Semantischer Index von Klassen und Packages
  • 33. Java SE 7 Date and Time API (JSR 310) Spec Lead (2007 - heute): Stephen Colebourne (Google) & Michael Nascimento Santos (Sun) Dritter Versuch nach Date (JDK 1.1) und Calendar (JDK 1.4) Definiert Instant, Interval, Duration Matchers, Adjusters, Resolvers Fußt auf ISO 8601 (XML), um Zeitzonen ergänzt Existierende Klassen wie util.Date , sql.Date und sql.Time sollen neue Interfaces implementieren, nicht deprecated werden Todo: Periods, Formatting, Parsing
  • 34. Java SE 7 Units specification (JSR 275, nur Java SE) javax.measure Spec Lead (2005): Steve Metsker (CapTech Ventures) Spec Lead (heute): Jean-Marie Dautelle & Werner Keil Quantity ( λ ), Dimension (nm), Measure (10), Unit (Wellenlänge) Typsicher und beliebig erweiterbar Datenbank mit Unterstützung von ISO 1000, ISO 31 (BIPM), NIST class Person { void setWeight(Measurable<Mass> weight); } double weightInKg = weight.doubleValue(KILOGRAM); // Oder lb. double weightInLiter = weight.doubleValue(LITER); // Error!
  • 35. Java SE 7, 8, … Mögliche Spracherweiterungen Array-Syntax für Collections erlaubt (wie in Scriptsprachen) Property-Literale (genaue Syntax diskutierbar) Automatische Typ-Ermittlung durch den Compiler List content = new LinkedList(10); Content[1] = &quot;Hallo&quot;; Point p = new Point(); p->X = 56; final map = new HashMap<String, Integer>(); // oder map := new HashMap<String, Integer>();
  • 36. Java SE 7, 8, … Mögliche Spracherweiterungen Factory-Methoden für Typisierung per Unterklasse BigInteger-Operationen endlich voll unterstützt / überladen Operator-Überladen, wie beispielsweise aus C++ bekannt für BigInteger bereits angedeutet, auch für Enums geplant Closures Lead: Neal Gafter (Microsoft, früher Sun + Google) Veto durch Joshua Bloch (Google, früher Sun) Foo f2 = Foo.new(SubclassOfFoo.class, 1, 2); BigInteger bi = new BigInt(&quot;1&quot;) + new BigInteger(&quot;1&quot;);
  • 37. Java SE 7, 8, … Mögliche Spracherweiterungen XML Integration in Java Mehrere Exceptions in einer Anweisung fangen: Entspricht einem return mit variablen Typ } catch (IOException, NullPointerException io_or_npe) { feature.add( <reviewed> <who>{ reviewer }</who>; <when>{ dc.encode(time) }</when>; </reviewed> );
  • 38. Quellen JDK 1.0 – J2SE 5.0 Java – Geschichte http://www.java.com/en/javahistory/timeline.jsp http://en.wikipedia.org/wiki/Java_version_history http://en.wikipedia.org/wiki/Java_Community_Process http://openjdk.java.net ersetzt http://openjdk.dev.java.net http://www.sun.com/software/opensource/java/faq.jsp http://jcp.org/en/jsr/stage?listBy=final Ältere Features http://en.wikipedia.org/wiki/Strictfp http://java.sun.com/developer/technicalArticles/JavaLP/assertions/ Joshua Bloch (2008): Effective Java, (2nd ed.), Addison Wesley
  • 39. Quellen Java SE 6 Java SE 6 http://www.tutego.com/java/java-6-mustang-news.htm https://scripting.dev.java.net http://weblogs.java.net/blog/shan_man/archive/2006/02/ choosing_the_dr.html Java SE 6 Update 10 http://java.sun.com/developer/technicalArticles/javase/java6u10/
  • 40. Quellen Java SE 7 Features http://tech.puredanger.com/java7/ http://www.tutego.com/java/jdk7-Java-SE-7.htm http://www.infoq.com/news/2007/07/concurrency-java-se-7 GUI https://appframework.dev.java.net
  • 41. Quellen Java SE 8, … http://www.cafeaulait.org/slides/nycjava/java7/Java_7_and_Beyond.html http://wiki.java.net/bin/view/JDK/ClosuresSyntaxInJava7 Sonstiges http://www.sun.com/aboutsun/media/ceo/ Die meisten Portraits stammen von den Blog-Seiten der Spec Leads Wall-E ist von http://www.walle-derfilm.de

Hinweis der Redaktion

  • #2: Beginnen mit Anekdote über Studium, erstes Java-Programm und wie ich damals entwickelt habe