Tampilan
Kenapa penting
Setiap aplikasi Java — dari skrip kecil sampai layanan Spring Boot yang melayani ribuan request — dimulai dari titik masuk yang sama: method main. Memahami struktur program, cara mengompilasi, dan cara membaca pesan error compiler adalah keterampilan yang kamu pakai setiap hari. Developer backend yang paham bagian-bagian ini bisa cepat menemukan kenapa aplikasi gagal start, bukan sekadar menekan tombol ▶ di IDE dan berharap.
Konsep inti
1. Anatomi program klasik
Ini program yang sudah kamu lihat di bab pertama. Kali ini kita bedah bagian per bagian:
java
// Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Halo, Jalur Java!");
}
}| Bagian | Arti |
|---|---|
public class Hello { ... } | Mendeklarasikan class bernama Hello. Semua kode Java klasik berada di dalam class. |
public static void main(String[] args) | Titik masuk program — JVM mencari method dengan bentuk persis ini saat program start. |
System.out.println("Halo, Jalur Java!"); | Sebuah statement: mencetak teks ke konsol. Diakhiri titik koma ;. |
{ ... } | Kurung kurawal menandai blok — isi class dan isi method. |
Kata-kata seperti public, static, void, dan String[] akan dibahas tuntas di bab-bab berikutnya (method, tipe data, array, dan OOP). Untuk sekarang, anggap baris main sebagai "mantra" pembuka yang wajib ada.
Aturan penting:
- Java membedakan huruf besar-kecil (case-sensitive):
Systembenar,systemsalah. - Class
publicharus disimpan di file dengan nama yang sama persis: classHello→ fileHello.java. - Setiap statement diakhiri titik koma.
2. Kompilasi dan menjalankan: javac + java
Cara klasik terdiri dari dua langkah:
bash
javac Hello.java # 1. kompilasi → menghasilkan Hello.class (bytecode)
java Hello # 2. JVM menjalankan class Hello → Halo, Jalur Java!Perhatikan: javac menerima nama file (dengan .java), sedangkan java menerima nama class (tanpa .class). Cara ini yang dipakai tool build seperti Maven di balik layar.
3. Menjalankan file sumber langsung
Untuk program satu file, kamu bisa melewati langkah javac. Sejak Java 11 (JEP 330), perintah java bisa menerima file .java, mengompilasinya di memori, lalu langsung menjalankannya:
bash
java Hello.java # tidak ada file .class yang dibuatSejak Java 22 (JEP 458), cara ini juga bekerja untuk program yang terdiri dari beberapa file di folder yang sama: java Main.java akan ikut mengompilasi class lain yang dipakai Main dari folder itu. Cara ini sangat praktis untuk belajar dan menulis skrip kecil; untuk aplikasi sungguhan tetap memakai tool build.
4. print vs println dan komentar
java
/**
* Mencetak ringkasan pesanan ke konsol.
* Komentar Javadoc seperti ini dipakai untuk dokumentasi class dan method.
*/
public class OrderSummary {
public static void main(String[] args) {
// print tidak menambah baris baru, println menambah baris baru
System.out.print("Pesanan ");
System.out.print("#1024");
System.out.println(" diterima.");
System.out.println("Status: DIPROSES");
/* println() tanpa isi mencetak
satu baris kosong */
System.out.println();
System.out.println("Terima kasih sudah berbelanja!");
}
}Jalankan dengan java OrderSummary.java, outputnya:
text
Pesanan #1024 diterima.
Status: DIPROSES
Terima kasih sudah berbelanja!Tiga jenis komentar di Java — semuanya diabaikan compiler:
| Sintaks | Jenis | Kegunaan |
|---|---|---|
// ... | satu baris | catatan singkat, menonaktifkan satu baris sementara |
/* ... */ | banyak baris | catatan panjang |
/** ... */ | Javadoc | dokumentasi class/method; dibaca tool dan IDE |
Latihan di exercises/ memakai Javadoc untuk menjelaskan tugasnya — biasakan membacanya.
5. Membaca pesan error compiler
Compiler Java memberi tahu file, nomor baris, dan posisi kesalahan. Misalnya titik koma terlupa:
text
Semi.java:3: error: ';' expected
System.out.println("Halo")
^
1 errorAtau nama file tidak cocok dengan class public di dalamnya:
text
Salam.java:1: error: class Hello is public, should be declared in a file named Hello.java
public class Hello {
^
1 errorBiasakan membaca baris pertama error dengan teliti: nama file, nomor baris (:3:), lalu pesannya. Tanda ^ menunjuk posisi tepat yang dicurigai compiler.
6. Catatan modern: compact source file & instance main method (Java 25)
Baris public static void main(String[] args) terasa berat untuk program pertama. Java 25 memfinalkan JEP 512 (Compact Source Files and Instance Main Methods) sehingga program kecil bisa ditulis jauh lebih ringkas — tanpa flag preview:
java
// Halo.java — compact source file: tidak ada deklarasi class
void main() {
IO.println("Halo dari compact source file!");
}bash
java Halo.java # → Halo dari compact source file!Yang berubah:
Compact source file — file boleh berisi method langsung tanpa
class { ... }; compiler membuatkan class tersembunyi untukmu.Instance main method —
mainboleh tanpapublic,static, dan parameterString[] args. Ini juga berlaku di class biasa:java// Hello2.java — class biasa dengan instance main method class Hello2 { void main() { System.out.println("Halo dari instance main method!"); } }Class
java.lang.IO—IO.println(...),IO.print(...), danIO.readln(...)untuk input/output konsol yang sederhana. Karena ada di paketjava.lang, class ini bisa dipakai tanpaimport.
Kurikulum ini tetap memakai bentuk klasik public static void main(String[] args) di sebagian besar contoh, karena bentuk itulah yang akan kamu temui di project nyata, framework, dan tutorial yang sudah ada. Gunakan compact source file untuk eksperimen cepat dan skrip kecil.
Contoh di dunia backend
Aplikasi Spring Boot — yang akan kamu bangun di level berikutnya — juga dimulai dari method main klasik. Potongan di bawah ini butuh library Spring sehingga belum bisa kamu jalankan sekarang; perhatikan saja strukturnya:
java
// Potongan: titik masuk aplikasi Spring Boot (butuh dependency Spring Boot)
@SpringBootApplication
public class InventoryApplication {
public static void main(String[] args) {
SpringApplication.run(InventoryApplication.class, args);
}
}Saat server menjalankan java -jar inventory.jar, JVM membaca class utama yang tercatat di dalam file .jar, lalu akhirnya memanggil main milik InventoryApplication. Dari satu baris SpringApplication.run(...) itulah web server, koneksi database, dan seluruh komponen aplikasi dinyalakan. Jadi ketika aplikasi gagal start, baris paling bawah jejak error (stack trace) biasanya menunjuk ke main.
Di sisi lain, compact source file berguna untuk skrip utilitas tim backend — misalnya program kecil untuk mencoba format data atau memeriksa sesuatu — yang cukup dijalankan dengan java Script.java tanpa membuat project.
Pertanyaan interview
1. Kenapa method main klasik ditulis public static void main(String[] args)?
public agar bisa dipanggil JVM dari luar class, static agar bisa dipanggil tanpa membuat object lebih dulu, void karena tidak mengembalikan nilai, dan String[] args menampung argumen dari command line. Sejak Java 25 launcher juga menerima instance main method (JEP 512), tetapi bentuk klasik tetap yang paling banyak kamu temui di project dan framework.
2. Apa beda java Hello dan java Hello.java?
java Hello menjalankan Hello.class yang sudah dikompilasi javac. java Hello.java memakai source-file mode: mengompilasi file sumber di memori lalu langsung menjalankannya, tanpa membuat file .class — cocok untuk skrip dan eksperimen, bukan untuk aplikasi production.
3. Kapan memakai compact source file, dan kapan class biasa?
Compact source file (void main() tanpa deklarasi class) cocok untuk skrip satu file, eksperimen, dan belajar. Aplikasi nyata terdiri dari banyak class dalam package, dibangun dengan Maven/Gradle, dan sering memakai framework — di sana kamu memakai class biasa.
Jebakan umum
- Nama file tidak cocok dengan class
public.public class Hellowajib diHello.java, termasuk huruf besar-kecilnya. - Salah huruf besar-kecil.
system.out.printlnmenghasilkan errorpackage system does not exist. - Menjalankan
java Hello.class. Perintahjavamenerima nama class (java Hello) atau file sumber (java Hello.java), bukan nama file.class. - Lupa titik koma. Kelonggaran tanpa titik koma hanya ada di JShell.
Ringkasan
- Program Java klasik terdiri dari class yang berisi method
public static void main(String[] args)sebagai titik masuk. javac File.javamengompilasi ke bytecode;java NamaClassmenjalankannya.java File.javamengompilasi dan menjalankan sekaligus — praktis untuk belajar dan skrip.printlnmencetak lalu pindah baris;printtidak. Komentar://,/* */, dan Javadoc/** */.- Java 25 (JEP 512) memungkinkan compact source file dan
void main()tanpastatic, plus classIOuntuk konsol.