Program Java pertama kita sudah berjalan, tetapi baris-barisnya masih kita terima begitu saja. Program Java yang lebih besar tersusun dari lapisan-lapisan yang selalu mengikuti pola yang sama: package, import, class, method, dan statement di dalamnya. Pada Chapter ini kita membedah anatomi tersebut dari luar ke dalam, memahami peran setiap lapisan, dan melihat bagaimana kurung kurawal membentuk struktur bersarang. Setelah chapter ini, berkas .java milik pemrogram lain pun dapat kita baca lapis demi lapis tanpa terasa asing.

Anatomi Program dari Luar ke Dalam #

Sebuah berkas .java yang lengkap memiliki kerangka seperti berikut. Perhatikan komentar di ujung kanan yang menandai nomor lapisan:

java
package sekolah.aplikasi;                      // 1. deklarasi package

import java.util.Scanner;                      // 2. import class dari pustaka

public class AplikasiNilai {                   // 3. deklarasi class

    public static void main(String[] args) {   // 4. method main
        int nilaiUjian = 90;                   // 5. statement
        System.out.println(nilaiUjian);        // 5. statement
    }
}

Setiap lapisan memiliki peran yang tetap:

  1. Deklarasi package (package sekolah.aplikasi;): menempatkan class ke dalam namespace bernama sekolah.aplikasi — alamat logis yang mencegah tabrakan nama antar class pada proyek besar.
  2. Import (import java.util.Scanner;): mempersingkat penulisan class pustaka agar cukup ditulis Scanner, bukan java.util.Scanner secara penuh.
  3. Deklarasi class (public class AplikasiNilai {): membuka wadah kode. Seluruh method dan variabel Java wajib berada di dalam sebuah class.
  4. Method main (public static void main(String[] args)): pintu masuk eksekusi — method yang dicari JVM saat program dijalankan.
  5. Statement (int nilaiUjian = 90;): instruksi kerja satu langkah, ditutup titik koma, yang dijalankan berurutan dari atas ke bawah.

Deklarasi Package dan Direktori #

Package mengikuti aturan cermin: nama package harus sama dengan jalur direktori berkasnya. Class sekolah.aplikasi.AplikasiNilai wajib disimpan di sekolah/aplikasi/AplikasiNilai.java. Aturan ini membuat struktur direktori proyek mencerminkan struktur logis kodenya, sehingga ratusan class dapat hidup berdampingan secara teratur.

Berkas latihan pada course ini sengaja tidak memakai deklarasi package — berkas seperti itu berada di default package dan dapat langsung dijalankan dari direktori apa pun. Pendekatan tersebut cocok untuk program kecil, tetapi proyek nyata selalu memakai package agar kode terorganisir dan nama class tidak saling bertabrakan.

Import dan Pustaka Standar #

Java menempatkan puluhan ribu class siap pakai di pustaka standar. Class dari module java.lang — seperti String, System, dan Math — dimuat otomatis sehingga tidak perlu diimpor. Class lain harus dinyatakan lewat import, misalnya import java.time.LocalDate; untuk bekerja dengan tanggal, atau import java.util.Scanner; untuk membaca input pengguna.

Tanpa import, kita tetap dapat memakai class pustaka dengan nama lengkapnya (java.time.LocalDate.of(2026, 1, 15)), tetapi penulisan menjadi panjang. Import hanyalah singkatan penulisan — compiler mengganti setiap nama singkat dengan nama lengkapnya saat kompilasi.

Class sebagai Wadah dan Method sebagai Aksi #

Sekarang kita lihat anatomi tersebut dalam program yang benar-benar berjalan. Program berikut menghitung total belanja sederhana:

public class RincianBelanja {
    public static void main(String[] args) {
        String namaBarang = "Buku tulis";
        int hargaSatuan = 4500;
        int jumlah = 3;

        int total = hargaSatuan * jumlah;

        System.out.println("Barang : " + namaBarang);
        System.out.println("Jumlah : " + jumlah + " buah");
        System.out.println("Total  : Rp" + total);
    }
}

Output yang Dihasilkan:

text
Barang : Buku tulis
Jumlah : 3 buah
Total  : Rp13500

Mari kita bedah susunan lapisannya:

  1. Baris 1 (public class RincianBelanja {): lapisan class. Tidak ada deklarasi package dan import karena program ini hanya memakai class String dan System dari java.lang yang dimuat otomatis.
  2. Baris 2 (public static void main(String[] args) {): lapisan method. JVM memulai eksekusi persis dari baris ini.
  3. Baris 3-5 (String namaBarang = ... dst.): tiga statement deklarasi variabel — lapisan isi method yang paling dalam.
  4. Baris 7 (int total = hargaSatuan * jumlah;): statement dengan expression hargaSatuan * jumlah di sisi kanan tanda sama dengan.
  5. Baris 9-11 (System.out.println(...)): tiga statement cetak yang memanfaatkan nilai variabel-variabel sebelumnya.

Blok Kode dan Struktur Bersarang #

Kurung kurawal { dan } membentuk blok — wilayah kode yang bersarang seperti kotak di dalam kotak. Struktur berkas di atas dapat digambarkan sebagai pohon:

text
RincianBelanja.java
└── class RincianBelanja
    └── method main
        ├── statement deklarasi variabel
        └── statement cetak

Setiap { harus ditutup tepat satu }; compiler menghitung keseimbangannya dan menolak berkas yang timpang. Java sendiri tidak peduli indentasi — statement boleh ditulis menjorok ataupun sejajar — tetapi komunitas Java sepakat menjorokkan isi blok empat spasi agar tingkat bersarang terlihat sekilas.

Dengan peta anatomi ini, dua lapisan terluar — class dan method main — masih menyimpan pertanyaan: mengapa method main harus ditulis persis public static void main(String[] args)? Chapter berikutnya membedah peran class sebagai wadah dan tanda tangan method main kata demi kata.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

RincianBelanja.java

Unduh berkas
java
public class RincianBelanja {
    public static void main(String[] args) {
        String namaBarang = "Buku tulis";
        int hargaSatuan = 4500;
        int jumlah = 3;

        int total = hargaSatuan * jumlah;

        System.out.println("Barang : " + namaBarang);
        System.out.println("Jumlah : " + jumlah + " buah");
        System.out.println("Total  : Rp" + total);
    }
}