Java 12 to Java 16 features
Java 12 to Java 16 brought steady improvements, refining features and introducing new enhancements. Let’s break it down:
Java 12 Features (Released March 2019)
- Switch Expressions (Preview)
- Allowed
switch
to return a value in a more concise way:var result = switch (day) { case MONDAY, FRIDAY -> "Busy day!"; case SATURDAY, SUNDAY -> "Weekend!"; default -> "Regular day."; };
- Improves readability and eliminates repetitive
break
statements.
- Allowed
- Improved Garbage Collection
- Introduced Shenandoah GC, reducing pause times for large heaps.
- Enhanced performance in memory management.
- Compact Number Formatting
- Helps format numbers in a human-readable way:
NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT); System.out.println(formatter.format(1000)); // Outputs "1K"
- Helps format numbers in a human-readable way:
Java 13 Features (Released September 2019)
- Text Blocks (Preview)
- Enables easier multiline string handling:
String json = """ { "name": "Java", "version": 13 } """;
- Improves readability and reduces escape sequences.
- Enables easier multiline string handling:
- Enhancements to Switch Expressions
- Further refinement of switch case for clearer structure.
Java 14 Features (Released March 2020)
- Records (Preview)
- Introduced a simpler way to create immutable data carriers:
record Person(String name, int age) {}
- Reduces boilerplate code in POJOs.
- Introduced a simpler way to create immutable data carriers:
- Pattern Matching for
instanceof
(Preview)- Eliminates redundant casting:
if (obj instanceof String str) { System.out.println(str.length()); }
- Eliminates redundant casting:
- Helpful NullPointerException Messages
- Improves debugging by clearly indicating what was
null
.
- Improves debugging by clearly indicating what was
Java 15 Features (Released September 2020)
- Text Blocks (Final)
- Multiline strings were finalized after previews in Java 13 & 14.
- Sealed Classes (Preview)
- Restricts inheritance to specific subclasses:
public sealed class Animal permits Dog, Cat {}
- Restricts inheritance to specific subclasses:
- Hidden Classes
- Allows creating runtime classes that aren’t visible outside their defining class loader.
Java 16 Features (Released March 2021)
- Records (Final)
- Records became a permanent part of Java.
- Pattern Matching for
instanceof
(Final)- Officially part of the language after preview versions.
- Improved Stream API
- Added
toList()
method for easier list conversion:Stream<String> stream = Stream.of("A", "B", "C"); List<String> list = stream.toList();
- Added
Java 12 to 16 focused on refining usability, improving syntax, and optimizing performance.