Field dan method yang kita tulis sejauh ini dimiliki tiap object: dua object RekeningBank menyimpan dua salinan saldo yang berbeda. Kebutuhan data kadang berlaku sebaliknya, misalnya jumlah seluruh rekening yang pernah dibuat; data itu satu untuk semua object, bukan milik salah satunya. Anggota static menyediakan tempat bagi data dan perilaku yang melekat pada class, bukan pada object.
Anggota Instance dan Anggota static #
| Sifat | Anggota instance | Anggota static |
|---|---|---|
| Kepemilikan | Tiap object menyimpan salinan sendiri | Satu salinan untuk seluruh class |
| Cara akses | Melalui variabel object: rekening.Saldo | Melalui nama class: RekeningBank.TotalRekening |
Konteks this | Tersedia di dalam method | Tidak ada; kode berjalan tanpa object tertentu |
Kata static ditulis pada deklarasi anggota, misalnya public static int TotalRekening. Runtime mengalokasikan anggota static sekali, terlepas dari banyaknya object yang dibuat, dan object tidak membawa salinannya. Gunakan anggota static hanya untuk data yang memang berlaku umum bagi seluruh class; data yang wajar berbeda antar object, seperti saldo dan pemilik, tetap menjadi anggota instance.
Contoh: Penghitung Total Rekening #
public class RekeningBank
{
public static int TotalRekening = 0;
public string Nomor;
public string Pemilik;
public int Saldo;
public RekeningBank(string nomor, string pemilik)
{
Nomor = nomor;
Pemilik = pemilik;
TotalRekening += 1;
}
public static void TampilkanTotal()
{
Console.WriteLine($"Total rekening terdaftar: {TotalRekening}");
}
public void TampilkanInfo()
{
Console.WriteLine($"Rekening {Nomor} a.n. {Pemilik} - Saldo: Rp{Saldo}");
}
}
RekeningBank.TampilkanTotal();
RekeningBank rekeningBudi = new RekeningBank("REK-8001", "Budi");
RekeningBank rekeningSiti = new RekeningBank("REK-8002", "Siti");
rekeningBudi.TampilkanInfo();
rekeningSiti.TampilkanInfo();
RekeningBank.TampilkanTotal();Output yang Dihasilkan:
Total rekening terdaftar: 0
Rekening REK-8001 a.n. Budi - Saldo: Rp0
Rekening REK-8002 a.n. Siti - Saldo: Rp0
Total rekening terdaftar: 2Mari kita telaah baris demi baris:
public static int TotalRekening = 0;: satu salinan milik class, diinisialisasi sekali sebelum object pertama dibuat.TotalRekening += 1;di dalam constructor: setiapnewmenambah penghitung yang sama, karena static field berada di luar data object.RekeningBank.TampilkanTotal()sebelum pembuatan object: penghitung masih0, membuktikan anggota static dapat diakses tanpa satu object pun.- Dua pemanggilan
TampilkanInfo(): method instance membaca data masing-masing object; saldo keduanyaRp0karena constructor bab ini hanya mengisi nomor dan pemilik. RekeningBank.TampilkanTotal()terakhir: penghitung menunjukkan2, sesuai jumlah object yang telah dibuat.
Anggota static sudah lama kita pakai tanpa disadari: Console.WriteLine adalah static method dari class Console, sedangkan int.Parse dan Math.Max juga dipanggil lewat nama class-nya, bukan lewat object.