New Features in Java 7

Today I checked the new features in Java 7 and found some interesting points while compared with Perl and other interpreting languanges. Will it possible that we can program Java as Perl in future?  🙂

You can find the detailed list from Java Programming Language Enhancements

Enhancements in Java SE 7

  • Binary Literals – In Java SE 7, the integral types (byteshortint, and long) can also be expressed using the binary number system. To specify a binary literal, add the prefix 0b or 0B to the number.
  • Underscores in Numeric Literals – Any number of underscore characters (_) can appear anywhere between digits in a numerical literal. This feature enables you, for example, to separate groups of digits in numeric literals, which can improve the readability of your code.
  • Strings in switch Statements – You can use the String class in the expression of a switch statement.
  • Type Inference for Generic Instance Creation – You can replace the type arguments required to invoke the constructor of a generic class with an empty set of type parameters (<>) as long as the compiler can infer the type arguments from the context. This pair of angle brackets is informally called the diamond.
  • Improved Compiler Warnings and Errors When Using Non-Reifiable Formal Parameters with Varargs Methods – The Java SE 7 complier generates a warning at the declaration site of a varargs method or constructor with a non-reifiable varargs formal parameter. Java SE 7 introduces the compiler option -Xlint:varargs and the annotations @SafeVarargs and @SuppressWarnings({"unchecked", "varargs"}) to supress these warnings.
  • The try-with-resources Statement – The try-with-resources statement is a try statement that declares one or more resources. A resource is an object that must be closed after the program is finished with it. The try-with-resources statement ensures that each resource is closed at the end of the statement. Any object that implements the new java.lang.AutoCloseable interface or the java.io.Closeable interface can be used as a resource. The classes java.io.InputStreamOutputStreamReaderWriterjava.sql.ConnectionStatement, and ResultSet have been retrofitted to implement the AutoCloseableinterface and can all be used as resources in a try-with-resources statement.
  • Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking – A single catch block can handle more than one type of exception. In addition, the compiler performs more precise analysis of rethrown exceptions than earlier releases of Java SE. This enables you to specify more specific exception types in the throws clause of a method declaration.

Besides above new features, I also want to introduce some other interesting programming new features:

Underscores in Numeric Literals,

int mask = 0b1010_1010_1010;

long big = 9_223_783_036_967_937L;

Strings in Switch Statements,

switch (s) {

case “April”: case “June”:

case “September”: case “November”:

return 30;

case “February”:

return …;

(It is introduced in above page as well, but Oracle claims that it produces generally more efficient byte codes than an if-then-else statements, so I reiterated it here)

Multi-Catch

try{

} catch (ClassCastException e) {

doSomethingClever(e);

throw e;

} catch (InstantiationException | NoSuchMethodException | InvocationTargetException e) {

// Useful if you do generic actions

log(e);

throw e;

}

Fork Join Framework — It is a bit like fork in Perl? 🙂

protected Integer compute () {

if (n<=1) return n;

Fibonacci f1 = new Fibonacci (n-1);

Fibonacci f2 = new Fibonacci (n-2);

f1.fork; f2.fork();

return f2.join() + f1.join();

No matter how Java get changed in future, I still love Java the most as it did change the world of the internet.