Java 11, released in September 2018, introduced several new features and improvements. Here is a summary of the release notes and some of the key new features in bullet points along with examples:
1. Local-Variable Syntax for Lambda Parameters
- Allows using `var` as the type of lambda parameters.
- Example:
// Before Java 11
(String str) -> System.out.println(str);
// Java 11 and later
(var str) -> System.out.println(str);
2. HTTP Client (Standard)
- The new `java.net.http.HttpClient` API provides a more modern and efficient way to send HTTP requests and receive responses.
- Example:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.jorvee-java.com/java-sample"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
3. Enhanced `java.util.stream` API
- New methods like `takeWhile`, `dropWhile`, `ofNullable` for Stream and Optional.
- Example:
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
// takeWhile
List<Integer> result1 = numbers.stream()
.takeWhile(n -> n < 4)
.collect(Collectors.toList()); // Output: [1, 2, 3]
// dropWhile
List<Integer> result2 = numbers.stream()
.dropWhile(n -> n < 4)
.collect(Collectors.toList()); // Output: [4, 5]
// ofNullable
Optional<String> optionalValue = Optional.ofNullable(null);
4. `var` in Lambda Expression
- Allows using `var` in lambda expressions, capturing the type from the context.
- Example:
BiFunction<Integer, Integer, Integer> add = (var x, var y) -> x + y;
5. Epsilon: A No-Op Garbage Collector
- Introduces a new garbage collector (`-XX:+UseEpsilonGC`) that does not reclaim memory but allows applications to run without GC overhead.
- Useful for performance testing or short-lived applications with minimal memory allocation.
6. Nest-Based Access Control
- Adds support for private interfaces, allowing nested classes to access private members of the enclosing class.
class Outer {
private interface InnerInterface {
void doSomething();
}
static class Nested implements InnerInterface {
public void doSomething() {
System.out.println("Doing something...");
}
}
}
7. Flight Recorder
- Previously commercial feature, now available for free in OpenJDK.
- Flight Recorder allows recording and analyzing application events for profiling and debugging purposes.
These are just a few of the new features and improvements introduced in Java 11. The release also includes performance enhancements, security updates, and other improvements. Always ensure to check the complete release notes and documentation for a comprehensive overview of all changes and updates.