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:
| Fitur | Final di | Fokus chapter |
|---|---|---|
var (inferensi tipe lokal) | Java 10 | var |
| Switch expression | Java 14 | Switch Expressions |
| Text block | Java 15 | Text Blocks |
| Record | Java 16 | Records |
| Sealed class | Java 17 | Sealed Classes |
Pattern matching instanceof | Java 16 | Pattern Matching |
Pattern matching switch + record pattern | Java 21 | Pattern Matching, Record Patterns |
| Virtual thread | Java 21 | Virtual Threads |
| Sequenced collection | Java 21 | Sequenced Collections |
Unnamed variable _ | Java 22 | Unnamed Variables dan Patterns |
| FFM API (Foreign Function & Memory) | Java 22 | Foreign Function and Memory API |
| Scoped value | Java 25 | Scoped 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:
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:
==============================
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: 12Bedah baris-per-baris untuk bagian pentingnya:
- Baris
record Fitur(String nama, int versiFinal) { }: satu baris ini mendefinisikan class data lengkap dengan constructor, accessornama()danversiFinal(), plusequals,hashCode, dantoString— pekerjaan yang pada gaya lama menuntut puluhan baris. - Baris
static final List<Integer> VERSI_LTS = List.of(17, 21, 25);: koleksi immutable berisi versi LTS;List.ofadalah pola standar untuk data tetap di kode modern. - Baris
var kepala = """...""": text block — literal string multi-baris tanpa rantai\ndan konkatenasi; lekukan minimal bersama otomatis dibuang. - Baris
daftar.stream().sorted(Comparator.comparingInt(Fitur::versiFinal)): stream diurut menaik berdasar versi final, laluforEachmencetak tiap baris dengan format%-26sagar 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 berkasimport 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());
}
}