Class Adalah Cetak Biru
Sampai sekarang kodemu tinggal di dalam method yang mengoper nilai-nilai biasa ke sana kemari. Class memungkinkanmu menggabungkan data yang saling berkaitan dan perilaku yang bekerja pada data itu menjadi satu tipe yang punya nama. Class adalah cetak birunya; benda yang benar-benar kamu pakai adalah objek yang dibuat dari class itu.
Sebuah class mendeklarasikan dua jenis member: field (data yang disimpan setiap objek) dan method (hal yang bisa dilakukan setiap objek).
new Dog() membangun sebuah objek di memori dan memberimu referensi ke objek itu. d.name dan d.bark() menjangkau objek tertentu tersebut.
Setiap Objek Punya State Sendiri
Inti dari sebuah class adalah kamu bisa mencetak banyak objek yang berdiri sendiri, masing-masing dengan nilai field-nya sendiri. Mengubah yang satu tidak pernah menyentuh yang lain.
rex dan bella adalah dua objek yang terpisah. Masing-masing punya name sendiri, jadi setiap bark() mencetak nilai yang berbeda. Data per objek ini disebut state instance.
Field dan Method Bekerja Sama
Method di dalam class bisa membaca dan mengubah field milik objeknya secara langsung, tanpa perlu mengopernya sebagai parameter. Method itu sudah "menempel" pada objek yang datanya ia sentuh.
Perhatikan bahwa increment() tidak menerima argumen. Ia bekerja pada field milik Counter mana pun tempat method itu dipanggil. Inilah perbedaan antara method class dan method static yang berdiri sendiri: method ini punya objek implisit untuk dikerjakan.
Kata Kunci this
Di dalam method, this adalah referensi ke objek tempat method itu dipanggil. Biasanya kamu tidak membutuhkannya, karena menulis count sudah berarti this.count. Namun this menjadi penting saat nama parameter bentrok dengan nama field, yang sangat sering terjadi di setter dan constructor.
Kesalahan pemula yang umum adalah menulis x = x; di dalam move. Itu hanya mengisi parameter dengan dirinya sendiri dan membiarkan field-nya tidak tersentuh. Compiler tidak akan memperingatkanmu, dan objekmu diam-diam tetap menyimpan nilai lamanya. this.x = x; adalah yang benar-benar mengubah field.
Nilai Default Field dan Referensi null
Saat kamu membuat objek, field-nya tidak dibiarkan berisi sampah: Java menginisialisasinya dengan nilai default, yaitu 0 untuk angka, false untuk boolean, dan null untuk referensi objek seperti String. Nilai default null itulah sumber crash klasik.
u.name bernilai null karena tidak ada yang mengisinya, jadi memanggil .length() padanya melempar NullPointerException. Selalu beri nilai yang bermakna pada objek sebelum memakai field-nya. Masalah inilah yang diselesaikan oleh constructor.
Mengatur Kode di Sekitar Class
Program sungguhan memodelkan domainnya sebagai class yang menyimpan data beserta operasi pada data itu. Di sini, satu class BankAccount menyimpan saldo dan menjaga cara saldo itu berubah:
Data (balance) dan aturan untuk mengubahnya (deposit, withdraw) berada di satu tempat. Kode di tempat lain meminta rekening itu melakukan sesuatu, bukan mengutak-atik angkanya secara langsung. Inilah fondasi desain yang rapi dan mudah dirawat.
Berikutnya: Constructor
Mengisi setiap field secara manual setelah new itu membosankan dan gampang terlupa, dan seperti yang baru saja kamu lihat, field yang terlupa menyisakan null yang siap membuat crash. Constructor memungkinkanmu mewajibkan dan menginisialisasi field sebuah objek tepat saat objek itu dibuat, sehingga BankAccount tidak pernah bisa ada tanpa pemilik. Itu topik halaman berikutnya.
Pertanyaan yang sering diajukan
Apa itu class di Java?
Class adalah cetak biru yang mendefinisikan data (field) dan perilaku (method) yang akan dimiliki sebuah jenis objek. Class itu sendiri hanyalah templat: objek yang sebenarnya kamu buat dari class itu dengan new. Misalnya, class Dog menjelaskan bahwa setiap anjing punya name dan bisa bark(), sedangkan setiap new Dog() adalah anjing tersendiri dengan namanya sendiri.
Apa perbedaan class dan objek di Java?
Class adalah definisinya; objek adalah instance konkret yang dibuat dari definisi itu dengan new. Satu class Person bisa menghasilkan banyak objek Person, masing-masing dengan nilai field-nya sendiri. Bayangkan class sebagai cetakan kue dan objek sebagai kue-kuenya: mengubah field satu objek tidak pernah memengaruhi objek lain.
Apa fungsi kata kunci this di class Java?
this merujuk ke objek saat ini, yaitu instance tertentu yang method-nya sedang berjalan. Kamu memakainya untuk menjangkau field milik objek itu sendiri, terutama saat sebuah parameter punya nama yang sama dengan field (this.name = name;). Tanpa this, penugasan itu hanya mengisi parameter dengan dirinya sendiri dan field-nya tetap tidak berubah.