Setiap variabel, method, class, dan package yang kita buat membutuhkan nama — dan nama tersebut disebut identifier. Java tidak menerima sembarang rangkaian karakter sebagai identifier: ada aturan tegas dari spesifikasi bahasa, dan ada puluhan kata — keywords — yang dicadangkan untuk keperluan bahasa sehingga tidak boleh dipakai sebagai nama. Pada Chapter ini kita pelajari aturan identifier, menguji nama yang sah dan yang ditolak compiler, lalu memetakan daftar lengkap keyword Java.

Aturan Penamaan Identifier #

Spesifikasi Java menetapkan empat aturan sederhana yang berlaku untuk semua identifier:

  • Karakter yang boleh dipakai adalah huruf, angka, garis bawah (_), dan tanda dolar ($). Huruf dari aksara lain seperti é atau 日 juga sah karena Java mendukung Unicode.
  • Angka tidak boleh menempati posisi pertama — nilai2 sah, 2nilai tidak.
  • Identifier tidak boleh sama dengan keyword atau literal yang dicadangkan (true, false, null).
  • Java peka terhadap huruf besar-kecil (case-sensitive): nama, Nama, dan NAMA adalah tiga identifier yang berbeda.

Tidak ada batas jumlah karakter yang bermakna, tetapi nama yang baik tetap ringkas dan deskriptif. Aturan di atas hanya menyatakan sah atau tidak sah — soal bagus atau tidaknya nama adalah urusan konvensi, yang kita bahas pada Chapter Aturan Penamaan.

Identifier Sah dalam Praktik #

Program berikut memakai beragam bentuk identifier yang semuanya diterima compiler:

public class IdentifierSah {
    public static void main(String[] args) {
        int stokBarang = 12;         // huruf, kata demi kata
        int _sisa = stokBarang - 5;  // diawali garis bawah
        int nilai2 = 90;             // angka boleh, asal bukan di awal
        int $diskon = 500;           // tanda dolar sah, tetapi jarang dipakai

        int Nama = 1;                // 'Nama' dan 'nama' adalah dua identifier berbeda
        int nama = 2;                // Java peka terhadap huruf besar-kecil

        System.out.println("stokBarang = " + stokBarang);
        System.out.println("_sisa      = " + _sisa);
        System.out.println("nilai2     = " + nilai2);
        System.out.println("$diskon    = " + $diskon);
        System.out.println("Nama       = " + Nama);
        System.out.println("nama       = " + nama);
    }
}

Output yang Dihasilkan:

text
stokBarang = 12
_sisa      = 7
nilai2     = 90
$diskon    = 500
Nama       = 1
nama       = 2

Mari kita bedah contoh-contohnya:

  1. Baris 4 (stokBarang): bentuk paling umum — huruf kecil semua, kata berikutnya diawali huruf kapital tanpa spasi.
  2. Baris 5 (_sisa): garis bawah sah di posisi mana pun, termasuk di awal. Perhatikan juga expression stokBarang - 5 yang dievaluasi menjadi 7 sebelum disimpan.
  3. Baris 6-7 (nilai2 dan $diskon): angka di tengah nama sah; tanda dolar pun sah meskipun hampir tidak pernah dipakai karena biasanya dihasilkan generator kode.
  4. Baris 9-10 (Nama dan nama): dua variabel hidup berdampingan karena case-sensitive. Kompiler menerimanya, tetapi membedakan nama hanya lewat kapitalisasi seperti ini menyesatkan pembaca — hindari dalam kode nyata.

Identifier yang Ditolak Compiler #

Sekarang kebalikannya: kelima deklarasi berikut melanggar aturan sehingga compiler menolaknya. Blok ini memang tidak dapat dikompilasi — perhatikan penjelasan di bawahnya:

java
int 2nilai = 90;          // angka di posisi pertama
int nama barang = 12;     // memuat spasi
int total-belanja = 5;    // tanda minus dibaca sebagai operator
int umur! = 17;           // tanda seru bukan karakter identifier
int class = 1;            // 'class' adalah keyword

Compiler javac merespons kelima baris tersebut dengan rangkaian pesan error: not a statement, error: ';' expected, dan error: <identifier> expected — satu pelanggaran kerap memicu beberapa pesan berantai karena parser kehilangan pijakan membaca barisnya. Penyebabnya bermacam-macam: 2nilai diawali angka, nama barang memuat spasi, total-belanja membuat parser membaca total dikurangi belanja, umur! memuat karakter ! yang bukan bagian identifier, dan class adalah keyword yang dicadangkan.

Daftar Keywords Java #

Java memiliki 50 keyword yang tidak boleh dipakai sebagai identifier. Daftar lengkapnya, dikelompokkan agar mudah dihafal:

KategoriKeyword
Tipe primitif (9)boolean, byte, char, double, float, int, long, short, void
Modifier (12)abstract, default, final, native, private, protected, public, static, strictfp, synchronized, transient, volatile
Deklarasi dan struktur (8)class, enum, extends, implements, import, interface, package, throws
Control flow (14)break, case, catch, continue, do, else, finally, for, if, return, switch, throw, try, while
Objek dan referensi (4)instanceof, new, super, this
Lainnya (1)assert
Dicadangkan tanpa fungsi (2)const, goto

Dua keyword terakhir menarik untuk disimak: const dan goto diwariskan dari bahasa C namun tidak pernah diberi fungsi di Java — keduanya tetap dicadangkan agar program lama tidak kehilangan makna kata-kata tersebut.

Di luar tabel, ada beberapa kata yang juga tidak boleh dipakai sebagai nama. Literal true, false, dan null dicadangkan meskipun secara teknis bukan keyword. Garis bawah tunggal _ kini berstatus keyword sejak Java 9 dan dipakai sebagai unnamed variable (JEP 456). Sebaliknya, kata seperti record, sealed, permits, dan yield hanyalah contextual keyword — hanya bermakna khusus di posisi tertentu, dan sah dipakai sebagai nama variabel. Program kecil berikut membuktikannya:

java UjiKataBaru.java
public class UjiKataBaru {
    public static void main(String[] args) {
        int record = 5;
        int yield = 6;
        int sealed = 7;
        int permits = 8;
        System.out.println(record + yield + sealed + permits);
    }
}

Output yang Dihasilkan:

text
26

Keempat nama tersebut lolos karena pada baris ini tidak ada konteks deklarasi record atau sealed class yang membuat kata-kata itu berperan sebagai keyword.

Kita kini tahu batas keras penamaan: karakter apa saja yang sah dan kata apa saja yang terlarang. Namun di antara jutaan nama yang sah, komunitas Java telah menyepakati gaya penamaan yang membuat kode terasa konsisten di mana pun dibaca. Chapter berikutnya membedah konvensi tersebut: camelCase, PascalCase, UPPER_SNAKE_CASE, dan package lowercase.

Referensi #

Berkas Sumber

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

IdentifierSah.java

Unduh berkas
java
public class IdentifierSah {
    public static void main(String[] args) {
        int stokBarang = 12;         // huruf, kata demi kata
        int _sisa = stokBarang - 5;  // diawali garis bawah
        int nilai2 = 90;             // angka boleh, asal bukan di awal
        int $diskon = 500;           // tanda dolar sah, tetapi jarang dipakai

        int Nama = 1;                // 'Nama' dan 'nama' adalah dua identifier berbeda
        int nama = 2;                // Java peka terhadap huruf besar-kecil

        System.out.println("stokBarang = " + stokBarang);
        System.out.println("_sisa      = " + _sisa);
        System.out.println("nilai2     = " + nilai2);
        System.out.println("$diskon    = " + $diskon);
        System.out.println("Nama       = " + Nama);
        System.out.println("nama       = " + nama);
    }
}

UjiKataBaru.java

Unduh berkas
java
public class UjiKataBaru {
    public static void main(String[] args) {
        int record = 5;
        int yield = 6;
        int sealed = 7;
        int permits = 8;
        System.out.println(record + yield + sealed + permits);
    }
}