Whats new in Java 7


Published on

New features in Java 7 SE to be released this summer

Published in: Technology, Education
1 Like
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Whats new in Java 7

  1. 1. SE 7 : Whats New! Ayushman Jain JDT/Core committer IBM © IBM 2011. Licensed under EPL v1.0
  2. 2. New features at a glance● Project Coin – small enhancement and new language features.● Support for dynamic languages.● Unicode 6.0 – new rupee symbol, brahmi script, emoticons.● New I/O and concurrent APIs. © IBM 2011. Licensed under EPL v1.0
  3. 3. Project coin features● Binary literals and underscores in literals.• Strings in switch.• @SafeVarargs - Varargs warnings.• Diamond - improved type inference for generic instancecreation.• Multi-catch and more precise rethrow.• try-with-resources (formerly known as AutomaticResource Management or ARM). © IBM 2011. Licensed under EPL v1.0
  4. 4. Strings in switch● When do you use a switch statement?● Valid case labels upto javaSE 6 can be – Int constants – Enum constants● String can also be constants! © IBM 2011. Licensed under EPL v1.0
  5. 5. Safe Varargs● Variable arity method - public static <T> List<T> java.util.Arrays.asList(T... a)● If T is the parameter type with variable arity and is also non-reifiable, a new warning on declaration of variable arity methods with parameter of type T.● A new annotation @SafeVarargs to suppress the warning at both declaration site and call site. © IBM 2011. Licensed under EPL v1.0
  6. 6. Reifiable types● A type whose type information is fully available at runtime, that is, a type that does not lose information in the course of type erasure.● Any type with type parameters is available to the JVM as the raw type because of type erasure.● So List<Number> and List<String> are both seen as List by the JVM.● Hence parameterized types are non-reifiable.● On the other hand, types such as “String” are reifiable. © IBM 2011. Licensed under EPL v1.0
  7. 7. Safe Varargs● A variable arity parameter of a generic type can cause heap pollution.● public static <T> List<T> java.util.Arrays.asList(T... a)● Heap pollution - A situation where a variable of a parameterized type refers to an object that is not of that parameterized type.● Usually, the method body is well behaved and only iterates over the elements.● Hence, unchecked warning is mostly a distraction. © IBM 2011. Licensed under EPL v1.0
  8. 8. @SafeVarargs● Annotation legal on static or final variable arity methods or constructors.● Not legal on – Fixed arity methods or constructors. – Variable arity methods or constructors that are neither final nor static.● Some java APIs already retrofitted with the annotation in JDK 7. © IBM 2011. Licensed under EPL v1.0
  9. 9. Binary Integer Literals and Underscores in numeric literals● Binary integer literals structured just like hex interger literals. Differences: – Binary digits used instead of hex digits – 0b now used instead of 0x● In numeric literals, underscores now permitted as separators between digits.● Applies to literals in any base: binary, octal, hexadecimal, or decimal● Applies to both integer literals and floating point literals © IBM 2011. Licensed under EPL v1.0
  10. 10. Multi-catch and more precise rethrow● Different catch blocks performing the same action on the caught exception.● They can now be combined into one single catch block using Disjunctive types.● Disjunctive type = ExceptionA | ExceptionB | ....● Disjunctive types implicitly final.● Also, now only the actually thrown exception is now rethrown and not its parent type. © IBM 2011. Licensed under EPL v1.0
  11. 11. Try With Resources● Language & Library changes to – Ease management of objects that require explicit freeing/disposal/destruction. – Prevent resource leaks (handles, streams ...) – A la Destructors in C++ (and others)● Library changes: – A new interface java.lang.AutoCloseable. – Libraries retrofitted to implement the new interface – Facilities to manage suppressed exceptions on java.lang.Throwable © IBM 2011. Licensed under EPL v1.0
  12. 12. What is a Resource● Basically a final variable local to the try block.● Must be of type AutoCloseable.● Must be initialized in the resource section.● Language guarantees that every successfully initialized non-null resource will be “closed”.● Will be closed regardless of normal or abrupt completion.● In LIFC order: Last initialized first closed. © IBM 2011. Licensed under EPL v1.0
  13. 13. Suppressed exceptions● “Primary” exception will be the exception seen by a user supplied catch block.● Exception from close methods are added to the suppressed list of primary exception (unless it is the primary exception.)● An interested party can query and process suppressed exceptions. New APIs in class Throwable: – public final void addSuppressed(Throwable); – public final Throwable [] getSuppressed(); © IBM 2011. Licensed under EPL v1.0
  14. 14. Diamond● Improved type inference for generic instance creation.● Before,● List<String> list = new ArrayList<String>();● Now,● List<String> list = new ArrayList<>();● Why not List<String> list = new ArrayList() ? © IBM 2011. Licensed under EPL v1.0
  15. 15. Support for dynamic languages● A growing interest in running programs written in dynamic languages on JVM.● Particularly scripting languages-JRuby,Jpython,Groovy.● Motivation – make implementation in such languages efficient and fast.● Current Problem - JVM instruction to invoke a method takes method descriptor as the argument – Method descriptor is the method name, argument types and the return type.● Solution – new invokeDynamic instruction and dynamic linking through method handles. © IBM 2011. Licensed under EPL v1.0
  16. 16. JVM bytecode instructions● invokevirtual - Invokes a method on a class. This is the typical type of method invocation.● invokeinterface - Invokes a method on an interface.● invokestatic - Invokes a static method on a class. This is the only kind of invocation that lacks a receiver argument.● invokespecial - Invokes a method without reference to the type of the receiver.● invokedynamic - enables an implementer of a dynamic language to translate a method invocation into bytecode without having to specify a target type that contains the method. © IBM 2011. Licensed under EPL v1.0
  17. 17. Method handles● Consider hypothetical dynamic language code function max (x,y) { if x.lessThan(y) then y else x }● To compile this for JVM MyObject function max (MyObject x,MyObject y) { if x.lessThan(y) then y else x }● Or use reflection.● With Java7, use method handles! © IBM 2011. Licensed under EPL v1.0
  18. 18. Use Eclipse for java 7● No builds available as of today.● Setup Eclipse to work for java 7 as described in http://wiki.eclipse.org/JDT_Core/Java7 © IBM 2011. Licensed under EPL v1.0
  19. 19. Thank You! © IBM 2011. Licensed under EPL v1.0