Ketika sebuah ide kecil muncul — “apa hasil 40 + 2?” atau “bagaimana method ini bekerja?” — ritual Java yang biasa terasa berat: buat berkas, tulis class, tulis main, kompilasi, jalankan. Untuk pertanyaan-pertanyaan kecil semacam itu, JDK menyertakan jshell, konsol interaktif tempat kita mengetik potongan kode Java dan langsung melihat hasilnya. Pada Chapter ini kita akan memulai sesi jshell, bereksperimen dengan variabel dan method, mengenal perintah-perintahnya, lalu membandingkan pengalaman itu dengan program Java yang lengkap.

Apa itu jshell #

jshell adalah Read-Eval-Print Loop (REPL): program membaca satu potongan kode (read), mengevaluasinya (eval), mencetak hasilnya (print), lalu mengulang siklus itu (loop) hingga kita keluar. jshell hadir sejak Java 9 dan menjadi alat utama untuk eksplorasi: menguji perilaku sebuah method, mencoba sintaks baru, atau memeriksa isi sebuah class dari pustaka standar — semuanya tanpa meninggalkan terminal.

Perbedaan paling terasa dibanding program biasa: di jshell kita tidak perlu menulis class ataupun method main. Kita cukup mengetik statement atau expression, dan jshell menjalankannya seketika.

Memulai Sesi #

Pastikan direktori bin/ JDK sudah berada di PATH, lalu ketik jshell di terminal. Berikut sesi nyata pada JDK 25 yang dipakai Course ini — perhatikan bagaimana tiap baris yang kita ketik langsung dijawab:

text
|  Welcome to JShell -- Version 25.0.4.1
|  For an introduction type: /help intro

jshell> int x = 40 + 2;
x ==> 42

jshell> System.out.println(x);
42

jshell> x = x + 8;
x ==> 50

jshell> /exit
|  Goodbye

Ada beberapa hal yang patut dicermati dari sesi di atas:

  1. Tanda jshell> adalah prompt — penanda bahwa konsol siap menerima kode. Angka versi pada banner pembuka mengikuti JDK yang terpasang di komputer Anda.
  2. x ==> 42 adalah feedback jshell: nama variabel, tanda ==>, dan nilai yang barusan terikat. Feedback ini muncul tanpa perlu System.out.println.
  3. 42 pada sesi kedua adalah keluaran dari println — perilaku yang sama persis seperti di program biasa.
  4. /exit menutup sesi; jshell berpamitan dengan | Goodbye.

Opsi -q (quiet) memulai sesi tanpa banner pembuka bila kita ingin layar yang lebih bersih: jshell -q.

Bereksperimen dengan Method #

jshell tidak berhenti pada variabel. Kita dapat mendeklarasikan method lengkap — multi-baris sekalipun — lalu langsung memanggilnya:

text
jshell> String sapa(String nama) {
   ...>     return "Halo, " + nama + "!";
   ...> }
|  created method sapa(String)

jshell> sapa("Budi")
$2 ==> "Halo, Budi!"

Prompt ...> menandakan jshell masih menunggu kelanjutan deklarasi method hingga kurung kurawal tertutup. Setelah method sapa dibuat, jshell mengonfirmasi dengan | created method sapa(String). Perhatikan hasil pemanggilan sapa("Budi"): karena kita tidak menyimpannya ke variabel, jshell otomatis menamai hasil tersebut $2 — nomor $ mengikuti urutan potongan kode yang telah dievaluasi ($1 adalah method itu sendiri, $2 hasil pemanggilan). Nilai $2 tetap bisa dipakai ulang seperti variabel biasa, misalnya System.out.println($2).

Perintah Slash #

Seluruh perintah internal jshell diawali garis miring. Yang paling sering terpakai:

PerintahFungsi
/varsMenampilkan semua variabel aktif beserta nilainya
/methodsMenampilkan semua method aktif
/listMenampilkan seluruh potongan kode beserta nomornya
/save <berkas>Menyimpan isi sesi ke berkas .jsh
/open <berkas>Memuat berkas .jsh ke sesi
/resetMengosongkan sesi dan memulai dari awal
/helpMenampilkan bantuan lengkap

Contoh singkat /vars setelah membuat satu variabel:

text
jshell> int harga = 25000;
harga ==> 25000

jshell> /vars
|    int harga = 25000

Ketika Kita Salah Menulis #

Kesalahan di jshell tidak menghentikan sesi. Compiler tetap memeriksa setiap potongan kode yang masuk, dan pesan error ditampilkan dengan format yang sama seperti kompilasi biasa — sesi kemudian lanjut seolah tidak terjadi apa-apa:

text
jshell> int umur = "tujuh belas";
|  Error:
|  incompatible types: java.lang.String cannot be converted to int
|  int umur = "tujuh belas";
|             ^-----------^

Perilaku ini sangat memudahkan eksplorasi: ketik, gagal, perbaiki, coba lagi — tanpa proses kompilasi ulang dari awal.

Dari jshell ke Program Penuh #

jshell menyembunyikan dua hal yang wajib ada di program Java sungguhan: pembungkus class dan kata kunci static pada method. Mari kita tulis ulang eksperimen tadi sebagai program lengkap:

java SapaPenuh.java
public class SapaPenuh {
    public static void main(String[] args) {
        int x = 40 + 2;
        System.out.println(x);
        System.out.println(sapa("Budi"));
    }

    static String sapa(String nama) {
        return "Halo, " + nama + "!";
    }
}

Output yang Dihasilkan:

text
42
Halo, Budi!

Mari kita telaah perbedaan pentingnya:

  1. Baris 1 (public class SapaPenuh {): di jshell, class pembungkus dibuat otomatis di belakang layar; di berkas sungguhan, kita menulisnya sendiri dan nama class wajib sama dengan nama berkas.
  2. Baris 2 (public static void main(...)): titik masuk yang di jshell tidak kita perlukan sama sekali — konsol sendiri yang bertindak sebagai pemicu eksekusi.
  3. Baris 9 (static String sapa(...)): method yang sama seperti di sesi jshell, kini berdomisili di dalam class dan diberi kata kunci static agar dapat dipanggil langsung dari main. Konsep static kita bedah tuntas pada Section Dasar Pemrograman.

Polanya begini: gunakan jshell sebagai papan percobaan, lalu angkat potongan kode yang sudah terbukti benar ke berkas program. Ketika berkas itulah yang mulai kita urus, kita perlu berkenalan dengan compiler javac — bintang utama Chapter Menggunakan Java Compiler.

Referensi #

Berkas Sumber

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

SapaPenuh.java

Unduh berkas
java
public class SapaPenuh {
    public static void main(String[] args) {
        int x = 40 + 2;
        System.out.println(x);
        System.out.println(sapa("Budi"));
    }

    static String sapa(String nama) {
        return "Halo, " + nama + "!";
    }
}