Menu

Cara Menjalankan Java: Compile dengan javac, Jalankan dengan java

Siklus dua langkah, compile lalu jalankan, di balik setiap program Java: ubah source .java menjadi bytecode dengan javac, lalu jalankan file .class dengan java.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Compile, Lalu Jalankan

Setelah JDK terpasang, menjalankan Java adalah siklus dua langkah. Berbeda dengan bahasa scripting, tempat kamu cukup mengarahkan interpreter ke sebuah file lalu langsung jalan, Java lebih dulu meng-compile source yang bisa dibaca manusia menjadi bytecode, lalu di langkah terpisah menjalankan bytecode itu di JVM.

Dua langkah itu sesuai dengan dua alat command line yang disertakan bersama JDK:

  • javac: compiler. Alat ini membaca Main.java dan menulis Main.class (bytecode).
  • java: launcher. Alat ini menyalakan JVM dan mengeksekusi bytecode di Main.class.

Kamu bisa menjalankan contoh mandiri apa pun langsung di halaman ini, karena editor di bawah mengerjakan kedua langkah itu untukmu. Tapi ada baiknya kamu memahami apa yang terjadi di komputermu sendiri, karena di sanalah proyek sungguhan berada.

Dua Perintah di Komputermu

Misalkan kamu menyimpan kode ini sebagai Main.java:

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello from the terminal");
    }
}

Buka terminal di folder yang berisi file itu, lalu jalankan compiler-nya:

javac Main.java

Kalau kodenya berhasil di-compile tanpa masalah, javac tidak mencetak apa pun dan membuat file baru, Main.class, di samping source-mu. File .class itu adalah bytecode: bukan teks yang bisa dibaca, dan tidak terikat pada sistem operasimu.

Sekarang jalankan dengan perintah java:

java Main
Hello from the terminal

Kesalahan pemula yang paling umum ada di sini: untuk menjalankan program, kamu memakai java, bukan javac, dan kamu memberikan nama class tanpa ekstensi. Yang benar java Main, tidak pernah java Main.class dan tidak pernah java Main.java.

Nama File Harus Sama dengan Public Class

Java menegakkan aturan yang mengejutkan pendatang baru: sebuah class public harus berada di file dengan nama yang persis sama, ditambah .java. public class Main harus ada di Main.java. Kalau huruf besar dan kecilnya salah, javac menolak meng-compile.

// This is in a file called Greeting.java
public class Greeting {   // ERROR: class Greeting should be in Greeting.java... wait, it is
    public static void main(String[] args) {
        System.out.println("Hi");
    }
}

Ketidakcocokan yang benar-benar sering menjebak orang lebih halus: menamai file greeting.java (huruf kecil) padahal class-nya Greeting, atau menyimpan Main.java tetapi menulis public class Hello. Compiler melaporkan sesuatu seperti:

Main.java:1: error: class Hello is public, should be declared in a file named Hello.java

Solusinya selalu sama: buat nama file dan nama public class identik, karakter demi karakter.

Jalan Pintas: Menjalankan Satu File Langsung

Sejak JDK 11, kamu bisa melewati langkah compile eksplisit untuk satu file source. Perintah java akan meng-compile-nya di memori dan menjalankannya sekaligus, tanpa menulis file .class ke disk:

java Main.java

Ini sempurna untuk eksperimen cepat dan script kecil. Perhatikan perbedaan apa yang kamu berikan:

  • java Main: menjalankan Main.class yang sudah di-compile.
  • java Main.java: meng-compile dan menjalankan file source sekaligus.

Mode satu file ini hanya berfungsi kalau seluruh programmu muat di satu file. Begitu kamu membagi kode ke beberapa class di beberapa file, kamu kembali meng-compile dengan javac lebih dulu. Untuk mempelajari dasar-dasarnya, mode satu file membuat siklus belajarmu tetap singkat.

Mengirim Argumen ke Programmu

Ingat String[] args di main? Itulah argumen command line. Apa pun yang kamu ketik setelah nama class di perintah java akan masuk ke array tersebut:

Di komputermu sendiri, kamu akan memberikan argumen seperti ini:

java Main hello world
First argument: hello
Total arguments: 2

Editor di atas tidak bisa menerima argumen terminal, jadi yang berjalan adalah cabang "tanpa argumen", tetapi kode yang sama menangani kedua kasus. Beginilah program Java membaca input yang dikirim saat program dijalankan, jauh sebelum kamu sampai ke file atau input dari pengguna.

Membaca Pesan Error dari Compiler

Saat javac menolak kodemu, compiler memberi tahu file, baris, dan apa yang salah. Belajar membaca pesan ini sudah setengah jalan untuk keluar dari kebuntuan. Ini contoh klasik, titik koma yang hilang:

public class Main {
    public static void main(String[] args) {
        System.out.println("Oops")   // no semicolon
    }
}
Main.java:3: error: ';' expected
        System.out.println("Oops")
                                  ^
1 error

Tanda caret (^) menunjuk ke tempat compiler mengharapkan sesuatu. Main.java:3 adalah nama file dan nomor barisnya. Tahan keinginan untuk menebak: baca barisnya, perbaiki satu hal yang disebutkannya, lalu compile ulang. Error compiler berarti belum ada yang dijalankan; error runtime (yang tampilannya berbeda) berarti programmu sempat berjalan lalu gagal.

Program untuk Memastikan Semuanya Berfungsi

Jalankan ini di editor, atau simpan sebagai Main.java lalu ketik javac Main.java dan java Main di komputermu sendiri. Kalau ketiga barisnya muncul, toolchain-mu berfungsi dari awal sampai akhir:

Ada tiga hal di sini yang akan segera kamu pelajari dengan benar: variabel int, penggabungan string dengan +, dan array dengan .length-nya. Untuk sekarang, cukup programnya berhasil di-compile dan mencetak output.

Berikutnya: Sintaks Java

Kamu sudah menjalankan beberapa program, tetapi kita belum membahas tanda bacanya: kurung kurawal, titik koma, public static void main, dan kenapa setiap baris terlihat seperti itu. Halaman berikutnya membedah sintaks Java satu per satu supaya strukturnya tidak lagi terasa seperti kode template belaka dan mulai masuk akal.

Pertanyaan yang sering diajukan

Bagaimana cara menjalankan program Java?

Simpan kodemu di file yang namanya sama dengan public class-nya (misalnya Main.java), buka terminal di folder itu, lalu jalankan dua perintah: javac Main.java untuk meng-compile-nya menjadi bytecode, lalu java Main untuk menjalankannya. Dengan JDK 11 atau yang lebih baru, kamu bisa melewati langkah pertama untuk satu file dan langsung menjalankan java Main.java.

Apa perbedaan javac dan java?

javac adalah compiler: program ini membaca source .java dan menghasilkan file .class berisi bytecode. java adalah launcher: program ini menyalakan JVM dan menjalankan bytecode di file .class. Kamu meng-compile sekali dengan javac, lalu menjalankannya sesering yang kamu mau dengan java.

Kenapa muncul error "could not find or load main class"?

Hampir selalu karena kamu memberikan nama yang salah ke java. Pakai nama class, bukan nama file: yang benar java Main, bukan java Main.class atau java Main.java. Pastikan juga kamu berada di folder yang berisi Main.class dan nama class-nya sama persis dengan nama file, termasuk huruf besar dan kecilnya.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai