Java versions

Java 6 through Java 25 each have a version page. This page still describes the earlier versions, including Java 21. Java 25 is a later release.

21 — Java Version Features (5 → 21)

Previous: 20 Streams & Optional · Next: 22 Data Structures

▶️ pkg2versions/versions1Java5Features.javaversions6Java21Features.java


Timeline summary

Version Year Headline features
5 2004 Generics, enums, autoboxing, for-each, annotations
7 2011 try-with-resources, diamond <>, NIO.2
8 2014 Lambdas, Streams, Optional, java.time
9 2017 Modules, List.of, takeWhile
10 2018 var local inference
11 2018 LTS HttpClient, String methods, run .java directly
14 2020 Switch expressions
15 2020 Text blocks
16 2021 Records, instanceof patterns
17 2021 LTS Sealed classes
21 2023 LTS Virtual threads, record patterns, sequenced collections

Run each demo

bash
1java pkg2versions/versions1Java5Features.java2java pkg2versions/versions2Java7Features.java3java pkg2versions/versions3Java8Features.java4java pkg2versions/versions4Java9To11Features.java5java pkg2versions/versions5Java17Features.java6java pkg2versions/versions6Java21Features.java

What to learn from each

Java 5 — foundations still used daily

Generics, enhanced for, enum, ExecutorService.

Java 8 — biggest mindset shift

Stop writing loops for every transformation — use Streams. Replace Date with java.time.

Java 9–11 — cleaner code

List.of(), var, Files.readString, HttpClient.

Java 14–17 — modern syntax

Switch expressions, text blocks, records, sealed classes.

Java 21 — concurrency revolution

java
1Thread.startVirtualThread(() -> fetchData());

Use virtual threads for blocking I/O at scale (HTTP calls, DB queries).


Full reference → Java Versions · 10 Java 9–21 Features

Next → 22 Data Structures