Dua kata muncul di setiap program Java sejak baris pertama: class dan main. Java adalah bahasa berorientasi objek, sehingga seluruh kode — baik fungsi maupun data — wajib berada di dalam sebuah class. Ketika JVM memulai program, JVM tidak membaca berkas dari atas ke bawah; JVM mencari satu method khusus bernama main dan memulai eksekusi di sana. Pada Chapter ini kita bedah peran class sebagai wadah, tanda tangan public static void main(String[] args) kata demi kata, serta cara menerima argumen baris perintah.
Class sebagai Wadah Kode #
Class adalah cetak biru yang mengelompokkan method dan variabel dalam satu nama. Konsepnya seperti berkas arsip: method dan data yang berhubungan dengan AplikasiSapa hidup di dalam class AplikasiSapa. Bahasa lain seperti C membolehkan fungsi global yang berdiri sendiri; Java tidak. Aturan ini membuat setiap potongan kode selalu memiliki alamat yang jelas: NamaClass.namaMethod().
Setiap berkas .java boleh memuat beberapa class, tetapi hanya satu yang boleh bersifat public — dan nama berkas wajib sama dengan nama class publik tersebut. Berkas SapaSiswa.java hanya boleh berisi satu public class SapaSiswa; class tambahan harus tanpa modifier public. Konvensi yang lebih rapi adalah satu class per berkas, dan itulah yang kita ikuti sepanjang course ini.
Bedah Tanda Tangan main Kata demi Kata #
Method main bukan method biasa — tanda tangannya dijaga ketat oleh spesifikasi Java. Mari kita bedah setiap unsurnya:
| Unsur | Peran |
|---|---|
public | Method dapat dipanggil dari luar class — syarat agar JVM dapat menjalankannya. |
static | Method melekat pada class, bukan object, sehingga JVM memanggilnya tanpa membuat object lebih dulu. |
void | Method tidak mengembalikan nilai apa pun ke pemanggilnya. |
main | Nama khusus yang dicari JVM; huruf kecil semua dan tidak boleh diubah. |
String[] args | Parameter berupa array of String yang menampung argumen baris perintah. |
Varian public static void main(String... args) juga sah; String... (varargs) hanyalah cara lain menulis parameter array, dan String args[] pun diterima compiler.
main Menerima Argumen Baris Perintah #
Parameter args terisi dari teks yang kita ketik setelah nama program. Program berikut dijalankan dengan perintah java SapaSiswa.java Budi Siti, lalu membaca kedua argumen tersebut:
public class SapaSiswa {
public static void main(String[] args) {
System.out.println("Jumlah argumen: " + args.length);
System.out.println("Argumen pertama: " + args[0]);
System.out.println("Argumen kedua : " + args[1]);
}
}Output yang Dihasilkan:
Jumlah argumen: 2
Argumen pertama: Budi
Argumen kedua : SitiMari kita amati cara kerjanya:
- Baris 3 (
args.length): setiap array memiliki fieldlengthberisi jumlah elemennya; tanpa argumen, nilainya0. - Baris 4-5 (
args[0]danargs[1]): mengakses elemen array berdasarkan indeks yang dimulai dari nol —args[0]berisi"Budi",args[1]berisi"Siti". - Argumen selalu String: angka di baris perintah datang sebagai teks dan harus dikonversi bila program membutuhkan angka.
Saat program dijalankan tanpa argumen, baris 4 tetap dijalankan padahal args kosong. JVM menghentikan program dengan ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 — contoh nyata error runtime yang akan kita bedah pada Chapter Membaca Pesan Error.
Class dapat Memuat Banyak Method #
Method main tidak harus bekerja sendirian; class boleh memuat method lain. Program berikut memisahkan tugas mencetak judul dan menyusun sapaan ke dua method terpisah:
public class AplikasiSapa {
public static void main(String[] args) {
tampilkanJudul();
System.out.println(sapa("Budi"));
System.out.println(sapa("Siti"));
}
static void tampilkanJudul() {
System.out.println("=== Aplikasi Sapa ===");
}
static String sapa(String nama) {
return "Halo, " + nama + "!";
}
}Output yang Dihasilkan:
=== Aplikasi Sapa ===
Halo, Budi!
Halo, Siti!Mari kita telusuri alurnya:
- Baris 3 (
tampilkanJudul();): statement pemanggilan method — eksekusi melompat ke baris 9, menjalankan isinya, lalu kembali ke baris 4. - Baris 4-5 (
System.out.println(sapa(...))): methodsapadipanggil lebih dulu dan mengembalikanString; nilai hasil itulah yang dicetak olehprintln. - Baris 9 (
static void tampilkanJudul()): method tanpa nilai balik (void) yang hanya mencetak. Modifierstaticdipakai agar method dapat dipanggil langsung darimainyang jugastatic. - Baris 13 (
static String sapa(String nama)): method dengan satu parameternamadan nilai balikStringyang disusun statementreturndi dalamnya.
JVM hanya menjalankan main secara otomatis; method lain dieksekusi karena dipanggil. Pola pemecahan kode seperti ini adalah embrio modularitas yang dikembangkan lebih jauh pada Section Method dan Modularitas.
Ketika main Tidak Ditemukan #
Perhatikan class berikut — sah menurut compiler, tetapi tidak memiliki method main:
public class TanpaMain {
public static void cetakSapaan() {
System.out.println("Halo");
}
}Kompilasi berhasil karena tidak ada aturan sintaks yang dilanggar. Baru saat dijalankan, JVM mencari pintu masuk dan gagal:
Error: Main method not found in class TanpaMain, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.ApplicationPesan tersebut memandu kita ke solusinya: tambahkan method main dengan tanda tangan standar ke dalam class. Compiler dan JVM memeriksa hal yang berbeda — sebagian kesalahan baru muncul setelah program berjalan.
Class dan method main kini tidak lagi terasa asing: class adalah wadahnya, main adalah pintunya, dan args adalah jalur data masuk pertama. Namun kode tanpa penjelasan sulit dipelihara — programmer lain, termasuk diri kita enam bulan ke depan, perlu memahami niat di baliknya. Chapter berikutnya membahas komentar: cara menjelaskan kode tanpa mengubah perilakunya.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
AplikasiSapa.java
Unduh berkaspublic class AplikasiSapa {
public static void main(String[] args) {
tampilkanJudul();
System.out.println(sapa("Budi"));
System.out.println(sapa("Siti"));
}
static void tampilkanJudul() {
System.out.println("=== Aplikasi Sapa ===");
}
static String sapa(String nama) {
return "Halo, " + nama + "!";
}
}
SapaSiswa.java
Unduh berkaspublic class SapaSiswa {
public static void main(String[] args) {
System.out.println("Jumlah argumen: " + args.length);
System.out.println("Argumen pertama: " + args[0]);
System.out.println("Argumen kedua : " + args[1]);
}
}