Pemalar
"Amigo, adakah anda tahu bahawa di Java tidak semua pembolehubah boleh diubah?"
"Bagaimana itu, Kim? Sesungguhnya, perkataan 'pembolehubah' bercakap tentang perubahan."
"Tidak ada keraguan tentang itu. Seperti banyak bahasa pengaturcaraan lain, Java mempunyai pemalar , iaitu pembolehubah yang nilainya tidak boleh diubah . Dan perkataan 'malar' bercakap tentang kemakalan."
"Dan untuk apa mereka?"
"Biasanya, ia digunakan untuk beberapa jenis perkara asas seperti bilangan Pi
atau bilangan hari dalam bulan dalam setahun. Yang berkata, pada dasarnya, seorang pengaturcara boleh menjadikan sebarang pembolehubah sebagai pemalar, jika dia memutuskan untuk melakukan itu. begitu juga perlu."
"Maksud anda seperti nama, warna kereta, atau nama hari dalam seminggu?"
"Anda mendapat idea yang betul. Apa-apa sahaja yang tidak boleh diubah."
"Dan apakah rupa pemalar ini di Jawa?"
"Java mempunyai kata kunci khas untuk mereka: final
. Mencipta pembolehubah tidak berubah kelihatan sama seperti mencipta yang biasa. Satu-satunya perbezaan ialah sebelum jenis pembolehubah anda perlu menulis perkataan final
, seperti ini:
final Type name = value;
"Apakah yang berlaku jika anda mencipta pemalar dan kemudian cuba memberikan nilai yang berbeza kepadanya?"
"Itu soalan yang betul untuk ditanya! Dan jawapan yang betul ialah ini: jika anda cuba memberikan nilai yang berbeza kepada pembolehubah final
, maka program anda tidak akan dikompil."
"Bagaimana jika anda mengisytiharkan final
pembolehubah tetapi tidak memberikan nilai kepadanya?"
"Tidak ada gunanya melakukan ini, jadi ia juga tidak dibenarkan di Java. Pembolehubah final
mesti dimulakan apabila ia diisytiharkan, iaitu, anda mesti menetapkan nilai kepadanya. Terdapat satu pengecualian kepada peraturan ini: anda boleh memindahkan permulaan bagi pembolehubah kelas statik menjadi pembina. Tetapi anda akan mengetahuinya kemudian.
"Yang berkata, bukan semua yang adalah final
pemalar. Untuk mengurangkan bilangan kata kunci, pembangun Java menggunakan perkataan itu final
untuk lebih daripada sekadar mengisytiharkan pemalar. final
juga boleh digunakan untuk kaedah dan juga kelas. Kaedah yang diisytiharkan sebagai final
tidak boleh ditindih, dan kelas diisytiharkan sebagai final
tidak boleh diwarisi."
"Eh... Ditindih? Diwarisi? Bahasa apa yang awak cakap sekarang?"
"Bahasa pengaturcaraan berorientasikan objek. Anda akan sampai ke sana tidak lama lagi. Sehingga itu, nikmati terminologi yang indah."
"Baiklah. Jadi, final
boleh diletakkan sebelum pembolehubah, kelas dan kaedah, dan kata kunci ini menjadikannya tidak boleh diubah dalam erti kata tertentu?"
"Ya. Tambahan pula, final
pengubah suai boleh ditambah sebelum sebarang pembolehubah: pembolehubah tempatan, parameter kaedah, medan kelas dan pembolehubah kelas statik.
"Inilah perkara penting yang perlu diingat: final
sebelum nama pembolehubah hanyalah perlindungan terhadap sebarang perubahan pada pembolehubah itu . Jika pembolehubah menyimpan rujukan kepada objek, maka objek itu masih boleh ditukar."
"Saya tidak begitu faham."
"Anda akan faham tidak lama lagi. Berikut ialah contoh:
|
Kami membuat tatasusunan. Ini tidak dibenarkan: pembolehubah data diisytiharkan sebagai final . Tetapi anda boleh melakukan ini. Dan juga ini. |
"Faham. Itu rumit."
Pemalar global
"Pada pendapat anda, apakah pemalar global?"
"Saya rasa pemalar global mungkin seperti pembolehubah global, hanya pemalar?"
"Tepat sekali. Jika anda perlu mengisytiharkan pemalar global dalam program anda, cipta pembolehubah kelas statik dan jadikannya public
dan final
. Terdapat gaya khas untuk nama pembolehubah tersebut: ia ditulis dalam semua huruf besar, dengan aksara garis bawah yang digunakan untuk perkataan berasingan.
Contoh:
class Solution
{
public static final String SOURCE_ROOT = "c:\\projects\\my\\";
public static final int DISPLAY_WIDTH = 1024;
public static final int DISPLAY_HEIGHT = 768;
}
Membayangkan pembolehubah
"Seperti yang saya katakan sebelum ini, anda tidak boleh mencipta berbilang pembolehubah tempatan dengan nama yang sama dalam satu kaedah. Dalam kaedah yang berbeza, anda boleh."
"Saya tahu itu!"
"Tetapi apa yang anda mungkin tidak tahu ialah pembolehubah dalam kelas dan pembolehubah tempatan dalam kaedah mungkin mempunyai nama yang sama.
Contoh:
Kod | Keterlihatan berubah-ubah |
---|---|
|
|
"Dalam add
kaedah tersebut, kami mengisytiharkan pembolehubah tempatan bernama sum
. Sehingga penghujung kaedah, ia membayangi (atau menutup ) sum
pembolehubah kejadian."
"Hmm... Saya akan katakan dalam erti kata tertentu ini adalah tingkah laku yang diharapkan."
"Tetapi itu bukan penghujung cerita. Ternyata jika pembolehubah contoh dibayangi oleh pembolehubah tempatan, masih ada cara untuk merujuk kepada pembolehubah contoh dalam kaedah. Kami melakukan ini dengan menulis kata kunci sebelum this
namanya :
this.name
"Berikut ialah contoh di mana konflik nama berjaya diselesaikan:
Kod | Keterlihatan berubah-ubah |
---|---|
|
|
Pembolehubah count
dan sum
tersedia di mana-mana dengan atau tanpa this
kata kunci. Pada baris di mana sum
pembolehubah tempatan membayangi sum
pembolehubah contoh, sum
pembolehubah tika hanya boleh diakses menggunakan this
kata kunci.
"Jelas sekali, saya perlu berlatih ini."
"Anda akan uruskan."
"Bagaimana jika pembolehubah kelas statik dibayangi dan bukannya pembolehubah contoh (bukan statik) sahaja? Anda tidak boleh mengaksesnya melalui this
?"
"Betul. Kata kunci ini tidak akan berfungsi. Anda perlu merujuknya melalui nama kelas:
ClassName.name
Contoh:
Kod | Keterlihatan berubah-ubah |
---|---|
|
|
"Beri perhatian: anda boleh mengakses dan count
pembolehubah sum
statik di mana-mana dengan atau tanpa menggunakan nama kelas Solution
sebagai awalan. Dalam baris tersebut di mana sum
pembolehubah tempatan membayangi sum
pembolehubah contoh, akses kepada sum
pembolehubah kelas hanya boleh dilakukan apabila digunakan Solution
sebagai awalan.
Pembolehubah di dalam for
gelung
"Dan satu lagi fakta kecil tetapi menarik. Terdapat juga tempat di mana pembolehubah diisytiharkan dengan cara yang istimewa — saya bercakap tentang di dalam gelung for
. " Biasanya, for
gelung mempunyai counter
pembolehubah dalam kurungan. Dan apakah keterlihatan pembolehubah ini? Lagipun, ia bukan dalam badan gelung. Adakah kaedah keseluruhannya? Atau tidak?"
"Saya telah pun mendengar sesuatu tentang perkara ini. Seperti yang saya fahami, pembolehubah yang diisytiharkan dalam pengepala gelung for
hanya kelihatan dalam badan gelung dan dalam pengepala gelung for
. "
"Syabas, Amigo. Tetapi tetap, lihat contoh untuk menguatkan bahan ini:
Kod | Keterlihatan berubah-ubah |
---|---|
|
|
"Jadi anda mengatakan bahawa dalam kod saya, saya boleh menulis beberapa gelung satu demi satu dengan pembolehubah kaunter dengan nama yang sama, dan tidak akan ada masalah?"
"Tidak akan ada masalah. Di sini, lihat:
Kod | Keterlihatan berubah-ubah |
---|---|
|
|
GO TO FULL VERSION