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:

UnsurPeran
publicMethod dapat dipanggil dari luar class — syarat agar JVM dapat menjalankannya.
staticMethod melekat pada class, bukan object, sehingga JVM memanggilnya tanpa membuat object lebih dulu.
voidMethod tidak mengembalikan nilai apa pun ke pemanggilnya.
mainNama khusus yang dicari JVM; huruf kecil semua dan tidak boleh diubah.
String[] argsParameter 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:

java SapaSiswa.java
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:

text
Jumlah argumen: 2
Argumen pertama: Budi
Argumen kedua  : Siti

Mari kita amati cara kerjanya:

  1. Baris 3 (args.length): setiap array memiliki field length berisi jumlah elemennya; tanpa argumen, nilainya 0.
  2. Baris 4-5 (args[0] dan args[1]): mengakses elemen array berdasarkan indeks yang dimulai dari nol — args[0] berisi "Budi", args[1] berisi "Siti".
  3. 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:

text
=== Aplikasi Sapa ===
Halo, Budi!
Halo, Siti!

Mari kita telusuri alurnya:

  1. Baris 3 (tampilkanJudul();): statement pemanggilan method — eksekusi melompat ke baris 9, menjalankan isinya, lalu kembali ke baris 4.
  2. Baris 4-5 (System.out.println(sapa(...))): method sapa dipanggil lebih dulu dan mengembalikan String; nilai hasil itulah yang dicetak oleh println.
  3. Baris 9 (static void tampilkanJudul()): method tanpa nilai balik (void) yang hanya mencetak. Modifier static dipakai agar method dapat dipanggil langsung dari main yang juga static.
  4. Baris 13 (static String sapa(String nama)): method dengan satu parameter nama dan nilai balik String yang disusun statement return di 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:

java
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:

text
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.Application

Pesan 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 berkas
java
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 + "!";
    }
}

SapaSiswa.java

Unduh berkas
java
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]);
    }
}