Menuntun kalian menyelesaikan instalasi JDK 25 LTS lewat Temurin atau SDKMAN, menyiapkan IntelliJ IDEA atau VS Code, lalu menulis program Hello World pertama — dari struktur main method, proses compile dengan javac, hingga menjalankan bytecode dengan java.

Di episode 2 kita membangun kerangka pikir OOP — class, object, dan empat pilar. Sekarang saatnya tangan mulai menulis kode. Episode ini menyelesaikan instalasi yang belum selesai di episode 0, lalu memandu kalian menulis, meng-compile, dan menjalankan program Java pertama: Hello World.
Kenapa Hello World penting dalam konteks OOP? Karena program sekecil ini sudah mengajarkan dua pelajaran fundamental: semua kode Java hidup di dalam class, dan main method adalah pintu masuk eksekusi. Memahami keduanya sejak awal akan mencegah kebingungan di episode 4 dan 5.
Jika kalian belum sempat menginstall di episode 0, sekarang waktunya. Dua jalur utama:
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk list java | grep -i temurin
sdk install java 25-temPerintah sdk list java menampilkan semua versi yang tersedia; kalian mencari baris dengan label 25-tem (Temurin 25). SDKMAN juga bisa mengaktifkan versi tertentu sebagai default dengan sdk default java 25-tem.
Unduh installer Temurin dari situs Adoptium dan pilih paket JDK 25 (bukan JRE). Setelah install, pastikan JAVA_HOME menunjuk ke direktori JDK:
java -version
javac -version
echo "$JAVA_HOME"Di Windows, jalankan perintah yang sama di Command Prompt. Jika javac tidak dikenali padahal JDK sudah terinstall, tambahkan bin direktori JDK ke PATH — di Windows, installernya biasanya sudah melakukannya otomatis.
Tip
Gunakan Temurin 25 (LTS) untuk series ini. Versi 21 (LTS sebelumnya) juga bisa dipakai hampir di semua episode, tetapi fitur di episode 19-20 lebih lengkap di 25. Jangan gunakan JDK yang lebih tua dari 21.
Buka IntelliJ IDEA → New Project → pilih bahasa Java, build system IntelliJ, dan SDK 25. IntelliJ otomatis mengenali JDK dari JAVA_HOME. Untuk series ini, kita tidak memakai Maven/Gradle dulu — cukup SDK murni.
Install extension "Extension Pack for Java" dari Microsoft. Extension ini membawa language server, debugger, dan test runner sekaligus. Setelah terpasang, VS Code akan memakai JDK 25 yang sudah terinstall untuk kompilasi.
Keduanya akan memberi kalian auto-completion, error highlighting, dan kemampuan menjalankan program dengan satu klik. Untuk episode ini, kita tetap berlatih lewat terminal dulu agar memahami proses compile yang sesungguhnya.
Buat file Main.java di ~/oop-lab/src:
public class Main {
public static void main(String[] args) {
System.out.println("Hello, OOP!");
}
}Empat bagian penting yang perlu kalian pahami:
public class Main — deklarasi class. Nama class wajib sama persis dengan nama file (Main.java).public static void main — signature main method yang wajib tetap seperti ini. public berarti bisa dipanggil dari mana saja, static berarti milik class (bukan object), void berarti tidak mengembalikan nilai.String[] args — argumen baris perintah, dibahas nanti di episode 5.System.out.println(...) — mencetak ke konsol.main Harus static?Ini pertanyaan OOP yang bagus. main dipanggil oleh JVM sebelum object apa pun dibuat — JVM belum tahu class apa yang akan di-instantiate. Karena itu main harus static (milik class), sehingga bisa dipanggil tanpa new. Pelajaran ini akan terasa penting lagi di episode 4.
Proses Java dua langkah: javac meng-compile source menjadi bytecode (file .class), lalu java menjalankan bytecode di JVM.
cd ~/oop-lab
javac -d out src/Main.java
java -cp out MainHasilnya:
Hello, OOP!Dua hal yang terjadi:
javac -d out src/Main.java membaca Main.java, lalu menulis Main.class (bytecode) ke direktori out. Flag -d menentukan direktori output.java -cp out Main memuat class Main dari classpath out dan menjalankan main-nya.Perhatikan: perintah java memakai nama class (Main), bukan nama file (Main.class). Ini khas Java dan menjadi penting saat kita punya banyak class di episode-episode berikutnya.
Salah satu hal yang membedakan Java dari bahasa lain: source dikompilasi ke bytecode yang berjalan di JVM, bukan langsung ke mesin. Kalian bisa memeriksa hasil compile:
ls -la out/
javap -c out/Main.classjavap -c menampilkan bytecode dalam bentuk mnemonik. Kalian tidak perlu memahaminya sekarang — yang penting kalian tahu bahwa Java memisahkan "compile" dan "run". Kompabilitas write once, run anywhere lahir dari pemisahan ini: bytecode yang sama bisa dijalankan di Linux, Windows, atau macOS selama JVM-nya ada.
Editor mengotomatiskan langkah javac + java. Di IntelliJ, cukup tekan tombol ▶ (Run) di samping main. Di VS Code, klik "Run" pada dekorator di atas main. Editor juga menampilkan error compile secara langsung saat mengetik — ini mempercepat debugging secara drastis.
Warning
Error paling umum di episode ini: nama file tidak sama dengan nama class. public class Main harus disimpan sebagai Main.java — huruf besar/kecil berpengaruh. Error could not find or load main class biasanya berarti nama class di perintah java tidak cocok dengan isi file.
Sebelum lanjut, coba dua modifikasi:
println menjadi nama kalian, compile, dan jalankan ulang.main dua kali dari class yang sama — buat method kedua yang dipanggil dari main, misal public static void sapa(). Ini latihan membiasakan diri bahwa main hanya titik masuk; logika seharusnya dipisah ke method lain.public class Main {
public static void main(String[] args) {
sapa();
sapa();
}
static void sapa() {
System.out.println("Halo dari method!");
}
}Inti yang harus dibawa pulang:
javac -version berhasil.public static void main(String[] args) adalah pintu masuk eksekusi yang dipanggil JVM tanpa object.javac -d out src/Main.java lalu java -cp out Main.Di episode 4 selanjutnya kita akan membedah class & object secara mendalam — deklarasi class dengan field instance/static, keyword new, reference, serta bagaimana Java menyimpan object di heap dan reference di stack. Pastikan Hello World kalian sudah berjalan, karena pelajaran inti OOP dimulai sekarang!