1. Variabel statis
Ketika kelas dimuat ke dalam memori, objek statis segera dibuat. Objek ini menyimpan variabel kelas statis (bidang kelas statis). Objek statis ada bahkan jika tidak ada objek kelas biasa (non-statis) yang telah dibuat.
Ketika kita mendeklarasikan variabel dalam sebuah kelas, kita menunjukkan apakah mereka akan dibuat sekali saja, atau apakah harus ada instance yang berbeda dari variabel-variabel ini di setiap objek. Secara default, salinan baru dari setiap variabel dibuat untuk setiap objek.
Variabel statis terikat ke objek statis kelas dan selalu ada satu contoh darinya.
Untuk membuat variabel statis di kelas, Anda perlu menulis static
kata kunci sebelum namanya. Format umum untuk mendeklarasikan variabel statis adalah:
static Type name = value;
Jika variabel statis tidak diberi nilai awal, itu diinisialisasi dengan nilai default:
Jenis | Nilai default |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
(hal yang sama dengan
) |
|
|
dan kelas apapun |
|
Contoh:
Kode | Catatan |
---|---|
|
|
|
|
|
|
|
|
|
Di dalam kelas, Anda bisa merujuk ke variabel statisnya hanya dengan menggunakan namanya. Tetapi untuk mengaksesnya dari kelas lain, Anda perlu menulis nama kelas sebelum nama variabel statis.
ClassName.variable
Contoh:
Variabel | Kelas | Mengakses variabel di luar kelasnya |
---|---|---|
|
|
|
|
|
|
|
|
Variabelnya adalah private . Itu tidak terlihat di luar kelas. |
|
|
Variabelnya adalah private . Itu tidak terlihat di luar kelas. |
|
|
Variabelnya adalah private . Itu tidak terlihat di luar kelas. |
2. Perbedaan antara variabel statis dan non-statis
Variabel non-statis (biasa) dari suatu kelas dideklarasikan dengan cara yang sama seperti variabel statis, hanya saja tanpa kata static
kunci.
Apa perbedaan antara variabel biasa dan variabel statis?
Variabel biasa dari suatu kelas terikat ke objek kelas (instance kelas), sedangkan variabel statis terikat ke objek statis kelas.
Jika ada beberapa instance kelas, masing-masing memiliki salinan variabel non-statis (biasa) sendiri. Variabel statis suatu kelas selalu disimpan dalam objek statisnya dan hanya ada satu contoh darinya.
Anda dapat mengakses variabel biasa (bidang) dari kelas hanya jika Anda memiliki referensi ke objek kelas. Dan di dalam metode kelas, tentu saja.
Contoh:
Mengakses bidang kelas menggunakan referensi objek |
---|
|
Anda dapat mengakses variabel statis dari mana saja (setelah memperhitungkan pengubah visibilitas): dari metode biasa, dari metode statis dari kelas yang sama, dari metode kelas lain, dll.
Contoh:
Mengakses bidang statis kelas tanpa menggunakan referensi objek |
---|
|
Bagaimana memori diatur:
Katakanlah kita memiliki Person
kelas dengan 4 bidang: dua statis dan dua tidak.
public class Person
{
public static int count = 0;
public static int sum = 0;
public int age = 0;
public String name;
}
Segera setelah memuat kelas
Saat mesin Java selesai memuat Person
kelas, memori akan terlihat seperti ini:
Setelah membuat objek pertama
Jika kita membuat Person
objek, maka gambarnya menjadi seperti ini:
Harap dicatat bahwa meskipun kedua objek memiliki dua variabel, ini adalah variabel yang berbeda: objek biasa memiliki variabel biasa, dan objek statis memiliki variabel statis.
Kami membutuhkan lebih banyak objek
Mari buat dua Person
objek lagi. Sekarang memori akan terlihat seperti ini:
Harap dicatat bahwa setiap objek memiliki variabel umur dan nama sendiri.
3. Menghapus dan menambahkan static
pengubah
Dari statis menjadi biasa
Apa yang terjadi jika kita mengambil variabel statis dan mengubahnya menjadi variabel biasa dengan menghapus pengubahnya static
? Misalnya static int sum
variabel.
Kode yang dimodifikasi akan terlihat seperti ini:
public class Person
{
public static int count = 0;
public int sum = 0;
public int age = 0;
public String name;
}
Sekarang memori terlihat seperti ini:
Variabel statis menghilang dari objek statis, dan sekarang setiap objek biasa memiliki variabelnya sendiri sum
.
Dari biasa menjadi statis
Kita bisa melakukan sebaliknya: tambahkan static
pengubah ke variabel biasa dari sebuah kelas. Mereka akan menghilang dari semua objek biasa dan akan muncul di objek statis. Misalkan kita memutuskan untuk membuat variabel age
dan name
statis. Maka kode akan terlihat seperti ini:
public class Person
{
public static int count = 0;
public int sum = 0;
public static int age = 0;
public static String name;
}
Dan sekarang memori akan terlihat seperti ini:
GO TO FULL VERSION