Streams were introduced in Java to help developers perform aggregate operations from a sequence of objects. With Java 9, few more methods are added to make streams better.
iterate method now has hasNext predicate as parameter which stops the loop once hasNext predicate returns false.
The try-with-resources statement is a try statement with one or more resources duly declared. Here resource is an object which should be closed once it is no more required. The try-with-resources statement ensures that each resource is closed after the requirement finishes. Any object implementing java.lang.AutoCloseable or java.io.Closeable, interface can be used as a resource.
Run the javadoc tool of jdk 9 with -html5 flag to generate new type of documentation.
dropWhile method throw away all the values at the start until the predicate returns true. It returns, in case of ordered stream, a stream consisting of the remaining elements of this stream after dropping the longest prefix of elements matching the given predicate.
Syntax is same on both java versions, result will be different. Run with JDK 7.
C:JAVA > java -cp test.jar com.tutorialspoint.Tester
Inside Java 7
Run with JDK 9.
C:JAVA > java -cp test.jar com.tutorialspoint.Tester
Inside Java 9
REPL:- Read-Eval-Print Loop.
With JShell, java has REPL capability. Using JShell, we can code and test java based logic without compiling using javac and see the result of calculations directly.
In java 9, a new feature is introduced where a jar format has been enhanced to have different versions of java class or resources can be maintained and used as per the platform.
With Java 9, new factory methods are added to List, Set and Map interfaces to create immutable instances. These factory methods are convenience factory methods to create a collection in less verbose and in concise way.
By convention, the source code of a module to lie in same directory which is the name of the module.
With Java 9 interfaces can have following type of variables/methods:
CompletableFuture class was introduced in Java 8 to represent the Future which can be completed by setting its value and status explicitly. It can be used as java.util.concurrent.CompletionStage. It supports dependent functions and actions which got triggered upon the future's completion. In java 9 CompletableFuture API has been enhanced further. Following are the relevant changes done to the API.
The following is the default project structure:-
In java 9, it can be used with anonymous class as well to simplify code and improves readability.
ofNullable method is introduced to prevent NullPointerExceptions and to avoid null checks for streams. This method returns a sequential Stream containing single element, if non-null, otherwise returns an empty Stream.
With java 9, following methods are added to List, Set and Map interfaces along with their overloaded counterparts.
static <E> List<E> of(E e1, E e2, E e3);
static <E> Set<E> of(E e1, E e2, E e3);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3);
static <K,V> Map<K,V> ofEntries(Map.Entry<? extends K,? extends V>... entries)
note:
With the Modules component, following enhancements has been added in Java 9 :-
Optional Class was introduced in Java 8 to avoid null checks and NullPointerException issues. In java 9, three new methods are added to improve its functionality.
With Java 9, a new multi-resolution image API has been introduced which supports multiple images with different resolution variants. This API allows a set of images with different resolution to be used as a single multi-resolution image.
Following are major operations of multi-resolution image:-
In Java 9 Process API which is responsible to control and manage operating system processes has been improved considerably. ProcessHandle Class now provides processes native processes ID, start time, accumulated CPU time, arguments, command, user, parent process, and descendants.
takeWhile method takes all the values until the predicate returns false. It returns, in case of ordered stream, a stream consisting of the longest prefix of elements taken from this stream matching the given predicate.
ProcessHandle class provides method to check processes' liveness and to destroy processes. It has onExit method, the CompletableFuture class can perform action asynchronously when process exits.
There are 90+ enhancements added to Java 8, the most significant ones are mentioned below :-
Yes! Following command will create a multi-release jar for java 7 and java 9 version.
$ jar -c -f test.jar -C java7 . --release 9 -C java9 .
With Java 9, two new enhancements are made to @Deprecated annotation:-
In Java 9, a new kind of programming component called module has been introduced. A module is a self-describing collection of code and data and has a name to identify it.