Java Version Changes
What are major new features in each Java version
Java 22 (2024)
Java 21 (2023)
Java 20 (2023)
Java 19 (2022)
Java 18 (2022)
Java 17 (2021)
Java 16 (2021)
Java 15 (2020)
Java 14 (2020)
Java 13 (2019)
Java 12 (2019)
Java 11 (2018)
Java 10 (2018)
Java 9 (2017)
Java 8 (2014)
Was ist eigentlich neu in Java 8?
Date
Annotations
Eine Annotation darf jetzt mehrfach gesetzt werden
@Foo("Value2")
class Person {}
Die Annotation dazu sieht so aus
@interface Foo {
String value();
}
Und hier werden dann bei Mehrfachnutzung die Einzelwerte abgelegt
Foo[] value();
}
Nullpointer
Angenommen man hat eine Klasse die eine Liste von Freunden beinhaltet, und jeder Freund hat wiederum einen Namen. Man kann also z.B. so auf einen Namen zugreifen
Allerdings kann es dabei an mehreren Stellen zu einer NullPointerException kommen, was aufwendige Tests darauf notwendig machen kann
friendsHolder.allFriends!=null &&
friendsHolder.allFriends.get(0)!=null &&
friendsHolder.allFriends.get(0).getName()!=null) {
}
So funktioniert das mit der neuen Optional Klasse
.flatMap(a -> Optional.ofNullable(a.allFriends))
.flatMap(b -> Optional.ofNullable(b.get(0)))
.flatMap(c -> Optional.ofNullable(c.getName()))
.ifPresent(System.out::println);
Concurrency Java 8
Nashorn JavaScript Engine for the JVM
Nashorn: A Next-Generation JavaScript Engine for the JVM
Other new Java 8 Features
Java 7 (2011)
Was ist eigentlich neu in Java 7?
Lesbare Konstanten
Konstanten können mit _ lesbarer gemacht werden und es ist möglich Binärkonstanten zu verwenden:
int one_million = 1_000_000;
int oneMillion = 1000000;
boolean equal=(one_million==oneMillion);
// add a binary constant 0b ...
int binaryNine=0b1001;
int nine=9;
boolean equal=(nine==binaryNine);
Switch mit Strings
In einem Switchblock können Strings verwendet werden
String result="String switch says the user is ";
switch(aString)
{
case "Foo":
result+="Mr. Foo";
break;
case "Bar":
result+="Mr. Bar";
break;
case JOHN:
result="John";
break;
default:
result="a surprise";
}
Diamond Operator
Es ist nicht mehr notwendig, den Datentyp bei der Instanziierung zu wiederholen
HashMap<Integer, String> prejva17=new HashMap<Integer, String>();
// Java 1.7
HashMap<Integer, String> products=new HashMap<>();
products.put(123456, "Gigant TV");
products.put(1, "DVD");
Mehr als eine Exception fangen
Man kann jetzt mehr als eine Exception auf einmal fangen und bearbeiten
{
if(bang==0)
{
throw new IllegalArgumentException();
}
else
{
throw new IllegalStateException();
}
}
// catch more than one exception at once
catch(IllegalArgumentException | IllegalStateException e)
{
System.out.println("got exception "+e);
}
Ressourcen Management
Bisher war es recht aufwendig mit Ressourcen umzugehen, die auch wieder geschlossen werden müssen
FileOutputStream fos=null;
try
{
fos=new FileOutputStream(filename);
// ...
}
catch (FileNotFoundException e)
{
e.printStackTrace();
// ...
throw new RuntimeException(e);
}
/* You needed a finally block to make sure your closeable resource
* is closed under all circumstances
*/
finally
{
try
{
if(fos!=null) fos.close();
} catch (IOException e)
{
e.printStackTrace();
// ...
throw new RuntimeException(e);
}
}
Jetzt können dieses Ressourcen automatisch geschlossen werden, wenn sie java.io.Closeable implementieren und innerhalb eines try Statements definiert und erzeugt werden:
* inside a try will automatically issue close()
* when the variable reaches its end of lifetime.
* Don't forget that even the implicit close()
* may issue an exception
*/
try(Closeable fos=new FileOutputStream(filename))
{
// ...
}
catch (IOException e) {
e.printStackTrace();
// ...
throw new RuntimeException(e);
}
Java 7 Links
- O'Reilly A look at Java 7's new features
- Joe Wright New language features in Java 7
- Oracle JDK 7 Adoption Guide
- Simon Koelsch Java 7
Java 6 (2006)
Java 5 (2004)
https://www.oracle.com/technical-resources/articles/java/java-5-features.html