Secara umum, static
berarti "terkait dengan jenis itu sendiri, bukan contoh dari jenis itu."
Itu berarti Anda dapat mereferensikan variabel statis tanpa pernah membuat instance dari tipe, dan kode apa pun yang merujuk ke variabel merujuk ke data yang sama persis. Bandingkan ini dengan variabel instan: dalam hal ini, ada satu versi independen dari variabel per instance kelas. Jadi misalnya:
Test x = new Test();
Test y = new Test();
x.instanceVariable = 10;
y.instanceVariable = 20;
System.out.println(x.instanceVariable);
mencetak 10: y.instanceVariable
dan x.instanceVariable
terpisah, karena x
dan y
merujuk ke objek yang berbeda.
Anda dapat merujuk anggota statis melalui referensi, meskipun itu ide yang buruk untuk melakukannya. Jika kami melakukannya:
Test x = new Test();
Test y = new Test();
x.staticVariable = 10;
y.staticVariable = 20;
System.out.println(x.staticVariable);
maka itu akan mencetak 20 - hanya ada satu variabel, bukan satu per contoh. Akan lebih jelas untuk menulis ini sebagai:
Test x = new Test();
Test y = new Test();
Test.staticVariable = 10;
Test.staticVariable = 20;
System.out.println(Test.staticVariable);
Itu membuat perilaku jauh lebih jelas. IDE modern biasanya akan menyarankan mengubah daftar kedua menjadi yang ketiga.
Tidak ada alasan untuk memiliki deklarasi inline menginisialisasi nilai seperti berikut, karena setiap instance akan memiliki sendiri NUMBER
tetapi selalu dengan nilai yang sama (tidak dapat diubah dan diinisialisasi dengan literal). Ini sama dengan hanya memiliki satu final static
variabel untuk semua instance.
private final int NUMBER = 10;
Karena itu jika tidak dapat diubah, tidak ada gunanya memiliki satu salinan per instance.
Tapi, masuk akal jika diinisialisasi dalam konstruktor seperti ini:
// No initialization when is declared
private final int number;
public MyClass(int n) {
// The variable can be assigned in the constructor, but then
// not modified later.
number = n;
}
Sekarang, untuk setiap instance MyClass
, kita dapat memiliki nilai yang berbeda tetapi tidak berubah number
.