Seluruh Course ini dipin pada Java 25 LTS, dan alasan pemilihan versi tersebut tidak sekadar “yang terbaru”. Antara Java 8 (2014) dan Java 25 (2025), bahasa Java mengalami gelombang modernisasi terbesar sepanjang sejarahnya: inferensi tipe, switch yang mengembalikan nilai, literal teks multi-baris, pembawa data ringkas bernama record, hingga thread jutaan skala. Section ini memetakan fitur-fitur tersebut satu per satu, masing-masing dengan contoh kode teruji pada JDK 25. Chapter pembuka ini berfungsi sebagai peta jalan: kita lihat ritme rilisnya, tabel fitur beserta versi finalnya, dan satu program kecil yang sekaligus memakai beberapa fitur modern.

Ritme Rilis Enam Bulanan dan Versi LTS #

Sejak Java 9 (2017), platform Java mengikuti rilis berbasis waktu (time-driven release) setiap enam bulan: Maret dan September. Setiap rilis membawa fitur kecil yang sudah matang, bukan menumpuk perubahan besar selama bertahun-tahun seperti era Java 7 ke 8. Dari ritme ini lahir penanda LTS (Long-Term Support) setiap dua tahun: Java 17, 21, dan 25 adalah LTS yang didukung bertahun-tahun oleh vendor, sementara rilis non-LTS berumur pendek. Materi Section ini memilih Java 25 karena menghimpun seluruh fitur bahasa modern dalam status final — tidak ada yang masih preview, kecuali dua API yang secara khusus kita tandai (Vector API dan structured concurrency).

Peta Fitur Bahasa dan Versinya #

Tabel berikut merangkum fitur yang dibahas pada Section ini beserta versi Java tempat fitur mencapai status final:

FiturFinal diFokus chapter
var (inferensi tipe lokal)Java 10var
Switch expressionJava 14Switch Expressions
Text blockJava 15Text Blocks
RecordJava 16Records
Sealed classJava 17Sealed Classes
Pattern matching instanceofJava 16Pattern Matching
Pattern matching switch + record patternJava 21Pattern Matching, Record Patterns
Virtual threadJava 21Virtual Threads
Sequenced collectionJava 21Sequenced Collections
Unnamed variable _Java 22Unnamed Variables dan Patterns
FFM API (Foreign Function & Memory)Java 22Foreign Function and Memory API
Scoped valueJava 25Scoped Values

Perhatikan polanya: Java 21 menfinalkan empat fitur sekaligus, dan Java 25 menyempurnakan lapisan konkurensi. Banyak fitur melewati masa preview satu hingga lima rilis sebelum dianggap matang — Vector API bahkan masih incubator di versi kesepuluhnya.

Peta Fitur dalam Satu Program #

Program kecil berikut memakai beberapa fitur modern sekaligus: record untuk data fitur, var untuk deklarasi ringkas, text block untuk judul, stream dengan method reference untuk mencetak tabel, dan List.of untuk data tetap:

java PetaFitur.java
import java.util.Comparator;
import java.util.List;

public class PetaFitur {

    record Fitur(String nama, int versiFinal) { }

    // Versi LTS yang menjadi patokan Course ini.
    static final List<Integer> VERSI_LTS = List.of(17, 21, 25);

    static String labelVersi(int versi) {
        return VERSI_LTS.contains(versi) ? versi + " (LTS)" : String.valueOf(versi);
    }

    public static void main(String[] args) {
        var kepala = """
                ==============================
                Peta Fitur Bahasa Modern Java
                ==============================
                """;
        System.out.print(kepala);

        var daftar = List.of(
                new Fitur("var", 10),
                new Fitur("switch expression", 14),
                new Fitur("text block", 15),
                new Fitur("record", 16),
                new Fitur("sealed class", 17),
                new Fitur("pattern matching switch", 21),
                new Fitur("record pattern", 21),
                new Fitur("virtual thread", 21),
                new Fitur("sequenced collection", 21),
                new Fitur("unnamed variable _", 22),
                new Fitur("FFM API", 22),
                new Fitur("scoped value", 25));

        daftar.stream()
                .sorted(Comparator.comparingInt(Fitur::versiFinal))
                .forEach(f -> System.out.printf(
                        "%-26s final di Java %s%n", f.nama(), labelVersi(f.versiFinal())));

        System.out.println("total fitur dipetakan: " + daftar.size());
    }
}

Output yang Dihasilkan:

text
==============================
Peta Fitur Bahasa Modern Java
==============================
var                        final di Java 10
switch expression          final di Java 14
text block                 final di Java 15
record                     final di Java 16
sealed class               final di Java 17 (LTS)
pattern matching switch    final di Java 21 (LTS)
record pattern             final di Java 21 (LTS)
virtual thread             final di Java 21 (LTS)
sequenced collection       final di Java 21 (LTS)
unnamed variable _         final di Java 22
FFM API                    final di Java 22
scoped value               final di Java 25 (LTS)
total fitur dipetakan: 12

Bedah baris-per-baris untuk bagian pentingnya:

  1. Baris record Fitur(String nama, int versiFinal) { }: satu baris ini mendefinisikan class data lengkap dengan constructor, accessor nama() dan versiFinal(), plus equals, hashCode, dan toString — pekerjaan yang pada gaya lama menuntut puluhan baris.
  2. Baris static final List<Integer> VERSI_LTS = List.of(17, 21, 25);: koleksi immutable berisi versi LTS; List.of adalah pola standar untuk data tetap di kode modern.
  3. Baris var kepala = """...""": text block — literal string multi-baris tanpa rantai \n dan konkatenasi; lekukan minimal bersama otomatis dibuang.
  4. Baris daftar.stream().sorted(Comparator.comparingInt(Fitur::versiFinal)): stream diurut menaik berdasar versi final, lalu forEach mencetak tiap baris dengan format %-26s agar kolom rata kiri selebar 26 karakter.

Cara Membaca Section Ini #

Tiap chapter mengikuti pola yang sama: masalah nyata yang mendorong fitur lahir, mekanisme di balik layar (apa yang dilakukan compiler atau JVM), contoh kode teruji beserta outputnya, lalu bedah baris-per-baris. Dua chapter memakai penanda khusus: Vector API masih incubator sehingga contohnya ditampilkan sebagai kode konsep tanpa klaim eksekusi, dan structured concurrency masih preview sehingga kodenya ditandai --enable-preview dan digantikan pola runnable berbasis ExecutorService. Sisanya dapat langsung dijalankan dengan JDK 25 tanpa flag tambahan.

Peta sudah di tangan; saatnya menyusuri fitur pertama yang paling sering dipakai sehari-hari: var.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

PetaFitur.java

Unduh berkas
java
import java.util.Comparator;
import java.util.List;

public class PetaFitur {

    record Fitur(String nama, int versiFinal) { }

    // Versi LTS yang menjadi patokan Course ini.
    static final List<Integer> VERSI_LTS = List.of(17, 21, 25);

    static String labelVersi(int versi) {
        return VERSI_LTS.contains(versi) ? versi + " (LTS)" : String.valueOf(versi);
    }

    public static void main(String[] args) {
        var kepala = """
                ==============================
                Peta Fitur Bahasa Modern Java
                ==============================
                """;
        System.out.print(kepala);

        var daftar = List.of(
                new Fitur("var", 10),
                new Fitur("switch expression", 14),
                new Fitur("text block", 15),
                new Fitur("record", 16),
                new Fitur("sealed class", 17),
                new Fitur("pattern matching switch", 21),
                new Fitur("record pattern", 21),
                new Fitur("virtual thread", 21),
                new Fitur("sequenced collection", 21),
                new Fitur("unnamed variable _", 22),
                new Fitur("FFM API", 22),
                new Fitur("scoped value", 25));

        daftar.stream()
                .sorted(Comparator.comparingInt(Fitur::versiFinal))
                .forEach(f -> System.out.printf(
                        "%-26s final di Java %s%n", f.nama(), labelVersi(f.versiFinal())));

        System.out.println("total fitur dipetakan: " + daftar.size());
    }
}