1. Pembolehubah statik
Apabila kelas dimuatkan ke dalam memori objek statik dicipta serta-merta. Objek ini menyimpan pembolehubah kelas statik (medan kelas statik). Objek statik wujud walaupun tiada objek biasa (bukan statik) kelas telah dicipta.
Apabila kami mengisytiharkan pembolehubah dalam kelas, kami menunjukkan sama ada pembolehubah itu akan dibuat sekali sahaja atau sama ada perlu ada kejadian yang berbeza bagi pembolehubah ini dalam setiap objek. Secara lalai, salinan baharu setiap pembolehubah dibuat untuk setiap objek.
Pembolehubah statik terikat pada objek statik kelas dan sentiasa ada satu contoh sahaja.
Untuk mencipta pembolehubah statik dalam kelas, anda perlu menulis static
kata kunci sebelum namanya. Format umum untuk mengisytiharkan pembolehubah statik ialah:
static Type name = value;
Jika pembolehubah statik tidak diberikan nilai awal, ia dimulakan dengan nilai lalai:
taip | Nilai asal |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
(perkara yang sama seperti
) |
|
|
dan mana-mana kelas |
|
Contoh:
Kod | Catatan |
---|---|
|
|
|
|
|
|
|
|
|
Di dalam kelas, anda boleh merujuk kepada pembolehubah statiknya hanya dengan menggunakan nama mereka. Tetapi untuk mengaksesnya dari kelas lain, anda perlu menulis nama kelas sebelum nama pembolehubah statik.
ClassName.variable
Contoh:
Pembolehubah | Kelas | Mengakses pembolehubah di luar kelasnya |
---|---|---|
|
|
|
|
|
|
|
|
Pembolehubahnya ialah private . Ia tidak kelihatan di luar kelas. |
|
|
Pembolehubahnya ialah private . Ia tidak kelihatan di luar kelas. |
|
|
Pembolehubahnya ialah private . Ia tidak kelihatan di luar kelas. |
2. Perbezaan antara pembolehubah statik dan bukan statik
Pembolehubah bukan statik (biasa) kelas diisytiharkan dengan cara yang sama seperti pembolehubah statik, hanya tanpa kata static
kunci.
Apakah perbezaan antara pembolehubah biasa dan pembolehubah statik?
Pembolehubah biasa kelas terikat pada objek kelas (contoh kelas), manakala pembolehubah statik terikat pada objek statik kelas.
Jika terdapat berbilang kejadian kelas, setiap daripadanya mempunyai salinan pembolehubah bukan statik (biasa) sendiri. Pembolehubah statik kelas sentiasa disimpan dalam objek statiknya dan hanya satu contoh sahaja wujud.
Anda boleh mengakses pembolehubah biasa (medan) kelas hanya jika anda mempunyai rujukan kepada objek kelas. Dan kaedah dalam kelas, sudah tentu.
Contoh:
Mengakses medan kelas menggunakan rujukan objek |
---|
|
Anda boleh mengakses pembolehubah statik dari mana-mana sahaja (selepas mengambil kira pengubah keterlihatan): daripada kaedah biasa, daripada kaedah statik kelas yang sama, daripada kaedah kelas lain, dsb.
Contoh:
Mengakses medan statik kelas tanpa menggunakan rujukan objek |
---|
|
Bagaimana memori disusun:
Katakan kita mempunyai Person
kelas dengan 4 medan: dua adalah statik dan dua tidak.
public class Person
{
public static int count = 0;
public static int sum = 0;
public int age = 0;
public String name;
}
Sejurus selepas memuatkan kelas
Apabila mesin Java telah selesai memuatkan Person
kelas, memori akan kelihatan seperti ini:
Selepas mencipta objek pertama
Jika kita mencipta Person
objek, maka gambarnya menjadi ini:
Sila ambil perhatian bahawa walaupun kedua-dua objek mempunyai dua pembolehubah, ini adalah pembolehubah yang berbeza: objek biasa mempunyai pembolehubah biasa, dan objek statik mempunyai pembolehubah statik.
Kami memerlukan lebih banyak objek
Mari buat dua lagi Person
objek. Sekarang ingatan akan kelihatan seperti ini:
Sila ambil perhatian bahawa setiap objek mempunyai pembolehubah umur dan nama sendiri.
3. Mengalih keluar dan menambah static
pengubah suai
Dari statik kepada biasa
Apakah yang berlaku jika kita mengambil pembolehubah statik dan mengubahnya menjadi biasa dengan mengalih keluar pengubahnya static
? Sebagai contoh, static int sum
pembolehubah.
Kod yang diubah suai akan kelihatan seperti ini:
public class Person
{
public static int count = 0;
public int sum = 0;
public int age = 0;
public String name;
}
Sekarang ingatan kelihatan seperti ini:
Pembolehubah statik hilang daripada objek statik, dan kini setiap objek biasa mempunyai sum
pembolehubah sendiri.
Dari biasa kepada statik
Kita boleh melakukan sebaliknya: tambah static
pengubah suai kepada pembolehubah biasa kelas. Mereka akan hilang daripada semua objek biasa dan akan muncul dalam objek statik. Katakan kita membuat keputusan untuk membuat age
dan name
pembolehubah statik. Kemudian kod akan kelihatan seperti ini:
public class Person
{
public static int count = 0;
public int sum = 0;
public static int age = 0;
public static String name;
}
Dan kini ingatan akan kelihatan seperti ini:
GO TO FULL VERSION