Saya sangat baru di Jawa dan ingin memahami perbedaan antara variabel kelas dan variabel instan.
Sebagai contoh:
class Bicycle {
static int cadence = 0;
int speed = 0;
int gear = 1;
}
Bagaimana variabel instan dan variabel kelas berbeda satu sama lain? Variabel mana di sini yang merupakan variabel kelas, dan mana yang merupakan variabel instan? Bagaimana ini mempengaruhi ruang lingkup?
Jawaban:
Mereka berdua adalah anggota variabel , artinya keduanya terkait dengan suatu kelas. Sekarang tentu saja, ada perbedaan di antara keduanya:
Variabel instance:
Variabel-variabel ini termasuk turunan dari sebuah kelas , dengan demikian sebuah objek. Dan setiap instance dari kelas itu (objek) memiliki salinan variabel itu sendiri. Perubahan yang dilakukan pada variabel tidak mencerminkan dalam contoh lain dari kelas itu.
Variabel kelas:
Ini juga dikenal sebagai variabel anggota statis dan hanya ada satu salinan dari variabel yang dibagi dengan semua instance dari kelas itu. Jika perubahan dilakukan ke variabel itu, semua instance lainnya akan melihat efek dari perubahan tersebut.
Contoh lengkap:
Outputnya adalah:
Sekarang, ubah variabel instan ke variabel kelas dengan menjadikannya statis:
Saya menggunakan metode non-statis untuk mendapatkan dan mengatur nilai
Barcode
agar dapat memanggilnya dari objek dan bukan dari kelas. Output akan mengikuti:sumber
Hal ini dijelaskan di sini (dengan contoh
Bicycle
kelas dengan variabel kelasnumberOfBicycles
dan contoh variabelcadence
,speed
,gear
&id
):Variabel kelas (dideklarasikan
static
) adalah lokasi yang umum untuk semua instance.Dalam contoh,
numberOfBicycles
adalah variabel kelas (karena dideklarasikanstatic
). Hanya ada satu variabel seperti itu (yaitu lokasi) yang umum untuk semua instance dan ke kelas. Jadi jika Anda memodifikasinumberOfBicycles
dalam satu metode, metode lain akan melihat nilai baru (bahkan berbedaBicycle
objek yang )Sebaliknya
gear
&id
adalah variabel instan (karena deklarasi mereka tidak memilikistatic
pengubah). SetiapBicycle
objek memiliki objeknya sendiri. Jika Anda memodifikasigear
untuk beberapaBicycle
a , dan jika b adalah contoh lain, memodifikasia.gear
tidak berpengaruhb.gear
Setiap objek Java adalah zona memori yang berbeda dengan beberapa data meta (misalnya beberapa referensi ke kelasnya) dan variabel turunannya sendiri (mungkin diwarisi dari superclass). Tetapi variabel kelas adalah umum untuk kelas dan dibagikan oleh semua instance.
Lihat juga Objek (ilmu komputer) & wikipage variabel Instance .
sumber
Variabel Instans:
Variabel Instance memiliki nilai yang terpisah dari setiap instance dari kelas.
Variabel kelas:
Dan variabel kelas yang paling penting mempertahankan nilai bersama tunggal untuk semua instance dari sebuah kelas, bahkan jika tidak ada objek instance kelas ada.
Perbedaan Singkat Antara Variabel Kelas dan Variabel Instans:
sumber
Perbedaan antara
class variables
daninstance
variabel, hanyalah masalahwho knows what?
.An
instance variable
hanya diketahui (= terikat ) pada instance konkret - maka namanya.Definisi kelas seperti cetak biru untuk membangun objek beton . Mungkin poin ini sedikit membingungkan Anda. Tetapi dengan menulis seperti ini, setiap variabel akan terikat pada objek konkretnya: misalnya Setiap orang memiliki Nama depannya sendiri
A
class variable
di sisi lain adalah - seperti namanya - diketahui oleh setiap anggota kelas; atau secara teknis: Diketahui / terikat di tingkat kelas . Contoh khas adalah penghitung dari berapa banyak objek yang telah Anda buat - meskipun itu adalah contoh yang sangat bermasalah; tapi itu tidak masalah pada tahap awal ini.numberOfPersons
dideklarasikanstatic
yang merupakan kata kunci untuk distingush antaraclass variables
daninstance variabes
. Variabel dideklarasikan seperti yang lain dalam definisi kelas. Tetapistatic
sinyal kata kunci, bahwa itu berbeda.firstName
,lastName
adalah variabel instan dan terikat pada instance konkret itunumberOfPersons
terikat ke kelas, sehingga setiap instance dapat mengakses variabel ini.tl; dr
Tempat variabel didefinisikan adalah definisi kelas.
Variabel kelas dikenal di / terikat ke tingkat kelas, yaitu setiap instance konkret memiliki akses ke sana. Untuk mendefinisikan variabel kelas, Anda menggunakan kata kunci
static
.Variabel Instance hanya dikenal pada tingkat instance. Anda mendefinisikannya tanpa
static
kata kunci.Dokumentasi lebih lanjut untuk Java ada di sini
sumber