Momen menulis program pertama adalah langkah penting dari teori menuju praktik. Pada Chapter ini kita akan menulis program Halo, Dunia! dari nol, mengompilasinya dengan javac, lalu menjalankannya dengan java. Kita juga akan mencoba jalur pintas untuk berkas sumber tunggal serta mengenali kendala yang paling sering muncul pada percobaan pertama. Setelah menyelesaikan chapter ini, kita memiliki siklus kerja lengkap: menulis kode, mengompilasi, dan menjalankannya.
Program Halo Dunia #
Tradisi pemrograman dimulai dari program paling kecil yang berhasil berjalan. Buat berkas baru bernama HaloDunia.java di editor atau IDE favorit, lalu tulis kode berikut:
public class HaloDunia {
public static void main(String[] args) {
System.out.println("Halo, Dunia!");
}
}Output yang Dihasilkan:
Halo, Dunia!Program tersebut hanya lima baris, tetapi setiap baris memiliki peran penting. Mari kita telaah baris-barisnya satu per satu:
- Baris 1 (
public class HaloDunia {): mendeklarasikan class bernamaHaloDunia. Karena class ini bersifatpublic, nama berkas wajib sama dengan nama class, yaituHaloDunia.java. - Baris 2 (
public static void main(String[] args)): mendeklarasikan methodmain— pintu masuk yang dicari JVM saat program dijalankan. Tanpa method ini, program tidak memiliki titik awal eksekusi. - Baris 3 (
System.out.println("Halo, Dunia!");): statement yang mencetak satu baris teks ke terminal, diakhiri karakter newline. Tanda titik koma wajib menutup setiap statement. - Baris 4-5 (
}): menutup blok methodmaindan blok class. Kurung kurawal harus selalu berpasangan.
Mengompilasi dengan javac #
Java adalah bahasa yang dikompilasi lebih dulu sebelum dijalankan. Buka terminal, masuk ke direktori tempat HaloDunia.java berada, lalu jalankan dua perintah berikut:
javac HaloDunia.java
java HaloDunia
Halo, Dunia!Perintah pertama memerintahkan compiler javac membaca HaloDunia.java dan menerjemahkannya menjadi HaloDunia.class — berkas bytecode, instruksi netral yang dipahami JVM. Perintah pertama tidak mencetak apa pun; tanda kompilasi berhasil adalah munculnya berkas baru berekstensi .class di direktori yang sama. Perintah kedua memerintahkan JVM memuat class HaloDunia lalu menjalankan method main di dalamnya. Nama class ditulis tanpa ekstensi .java maupun .class — JVM mencari class di classpath, bukan berkas sumber.
Menjalankan Berkas Sumber Langsung #
Sejak Java 11, terdapat cara lebih cepat untuk berkas tunggal: perintah java dapat menerima berkas .java secara langsung. JVM akan mengompilasi berkas tersebut di memori lalu langsung menjalankan class pertama di dalamnya:
java HaloDunia.java
Halo, Dunia!Hasilnya sama persis dengan jalur javac dua langkah, tetapi tidak ada berkas .class yang tertinggal di direktori kerja. Mode ini (diperluas oleh JEP 458
agar mendukung program multi-berkas) sangat cocok untuk latihan dan skrip kecil.
Mengubah Program dan Mengompilasi Ulang #
Perangkat lunak berkembang lewat siklus edit → kompilasi → jalankan. Program kedua berikut memperluas HaloDunia menjadi perkenalan diri dengan variabel:
public class PerkenalanDiri {
public static void main(String[] args) {
String nama = "Budi Santoso";
int umur = 17;
String jurusan = "Rekayasa Perangkat Lunak";
System.out.println("=== Perkenalan Diri ===");
System.out.println("Nama : " + nama);
System.out.println("Umur : " + umur);
System.out.println("Jurusan: " + jurusan);
}
}Output yang Dihasilkan:
=== Perkenalan Diri ===
Nama : Budi Santoso
Umur : 17
Jurusan: Rekayasa Perangkat LunakSimpan berkas ini sebagai PerkenalanDiri.java, lalu jalankan java PerkenalanDiri.java. Mari kita amati bagian pentingnya:
- Baris 3-5 (
String nama = ...dst.): tiga deklarasi variabel — duaStringuntuk teks dan satuintuntuk bilangan bulat — sekaligus mengisi nilainya. - Baris 7-10 (
System.out.println(...)): empat statement cetak. Operator+menggabungkan teks dengan nilai variabel menjadi satu string sebelum dicetak. - Baris 4 dan 9 (
umur): variabel bertipeintotomatis diubah menjadi representasi teks saat penggabungan terjadi.
Setiap kali kode berubah, ulangi kompilasi sebelum menjalankan; dengan mode berkas tunggal, satu perintah java PerkenalanDiri.java sudah mencakup keduanya.
Kendala Awal yang Sering Muncul #
Kendala klasik pertama: nama berkas tidak sama dengan nama class publiknya. Berikut contoh berkas bernama NamaFile.java yang mendeklarasikan class NamaBeda:
public class NamaBeda {
public static void main(String[] args) {
System.out.println("uji");
}
}Compiler menolak berkas tersebut dan mencetak pesan berikut saat javac NamaFile.java dijalankan:
NamaFile.java:1: error: class NamaBeda is public, should be declared in a file named NamaBeda.java
public class NamaBeda {
^
1 errorPerbaikannya sederhana: samakan nama berkas dengan nama class publiknya. Kendala kedua: tertukar antara java HaloDunia dan java HaloDunia.java. Argumen tanpa ekstensi berarti “cari berkas .class hasil kompilasi”, sedangkan argumen berekstensi .java berarti “kompilasi lalu jalankan berkas sumber”. Jika kita menjalankan java HaloDunia padahal belum mengompilasi, JVM membalas Error: Could not find or load main class HaloDunia — pesan seperti ini akan kita bedah pada Chapter Membaca Pesan Error.
Program pertama kita kini sudah ditulis, dikompilasi, dan dijalankan melalui dua jalur berbeda. Namun baris-baris di dalamnya belum sepenuhnya kita pahami — apa fungsi class, mengapa main harus bertanda tangan persis seperti itu, dan bagaimana seluruh bagian tersusun berdampingan. Chapter berikutnya membedah anatomi program Java lapis demi lapis.
Referensi #
- Oracle: Getting Started with Java
- Oracle JDK 25 Documentation
- JEP 458: Launch Multi-File Source-Code Programs
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
HaloDunia.java
Unduh berkaspublic class HaloDunia {
public static void main(String[] args) {
System.out.println("Halo, Dunia!");
}
}
PerkenalanDiri.java
Unduh berkaspublic class PerkenalanDiri {
public static void main(String[] args) {
String nama = "Budi Santoso";
int umur = 17;
String jurusan = "Rekayasa Perangkat Lunak";
System.out.println("=== Perkenalan Diri ===");
System.out.println("Nama : " + nama);
System.out.println("Umur : " + umur);
System.out.println("Jurusan: " + jurusan);
}
}