Class Variables and Methods
Diperkenalkan| English | Makna |
|---|---|
| static variable/ˈstætɪk ˈveərɪəbl/ | variabel statis |
| static method/ˈstætɪk ˈmeθəd/ | metode statis |
Dua objek, satu jumlah konstruksi
- Ada dan Bo memiliki skor yang terpisah, tetapi membuat salah satu siswa meningkatkan variabel statis yang sama,
Student.count. Setelah dua konstruksi, hitungannya adalah 2; mengubah skor Ada tidak mengubah skor Bo. - Bandingkan apa yang dijelaskan oleh setiap nilai: skor menggambarkan satu siswa, sementara counter ini menggambarkan konstruksi kelas. Salinan referensi ke Ada tidak membuat objek baru dan tidak menambah counter.
Tempatkan setiap bidang pada tingkat yang tepat
- Bidang instansi memiliki lokasi penyimpanan terpisah di setiap objek. Bidang statis memiliki satu lokasi penyimpanan untuk kelas yang dimuat ini, bahkan sebelum objek apa pun dibuat;
privatemengontrol akses, bukan jumlah salinan. - Dalam contoh single-threaded kecil ini, konstruktor meningkatkan
countsekali per konstruksi. Ini menghitung objek yang dibuat, bukan objek yang masih aktif: kehilangan referensi tidak secara otomatis menurunkannya.
class Student {
private int score;
private static int count = 0;
public Student(int initialScore) {
score = initialScore;
count++;
}
public int getScore() { return score; }
public void setScore(int newScore) { score = newScore; }
public static int getCount() { return count; }
public static int readScore(Student s) { return s.score; }
}
One shared static count
count adalah satu nilai bersama yang dimiliki oleh kelas.
A static (class) variable is...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
static berarti satu salinan bersama yang dimiliki oleh kelas.
If the constructor does count++ and count starts at 0, what is count after creating 3 objects?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Each construction increments the shared count → 3.
Metode statis tidak memiliki penerima
- Metode statis tidak memiliki objek saat ini implisit, sehingga tidak dapat menggunakan
thisatau bidang instansi yang tidak berkualifikasi sepertiscore.getCount()dapat membacacountkarena bidang tersebut milik kelas. - Statis tidak melarang penggunaan objek.
readScore(Student s)menerima referensi objek eksplisit dan membacas.score; ia berada di dalamStudent, di mana akses ke bidang pribadi tersebut diperbolehkan. Di sinisharus non-null.
return score; di dalam method statis adalah kesalahan waktu kompilasi pada kelas ini. return s.score; di dalam method statis yang ditunjukkan adalah valid: referensi mengidentifikasi skor siswa mana yang akan dibaca.
Di dalam kelas Student yang ditunjukkan, method static dapat menggunakan return score; tanpa menentukan objek Student apa pun.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Salah: score adalah field instance dan method static ini tidak memiliki penerima implisit. Dengan parameter Student s non-null, return s.score; valid di dalam Student.
Di dalam Student, method static mana yang dapat membaca skor dari parameter s non-null?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Referensi eksplisit s mengidentifikasi objek; Student sendiri dapat mengakses field private-nya.
Jejak pemanggilan kelas dan objek
- Setelah
Student a = new Student(50);danStudent b = new Student(75);,Student.getCount()bernilai 2,a.getScore()bernilai 50 danb.getScore()bernilai 75.a.setScore(60)hanya mengubah skor Ada. Student.readScore(a)kemudian mengembalikan 60 tanpa membuat siswa lain. Method tersebut statis, namun parameternya secara eksplisit mengidentifikasi objek yang sudah ada yang keadaannya dibacanya.
An instance method like getScore() is called on...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Instance members act on a specific object.
Pisahkan sintaksis sah dari gaya penulisan yang jelas
- Pilihlah
Student.getCount()untuk menunjukkan bahwa method tersebut milik kelas. Java juga memperbolehkana.getCount()untuk method statis ini; sintaksis itu tidak membuat jumlah spesifik untuk Ada. a.getScore()adalah pemanggilan instance dengan Ada sebagai penerima.Student.getScore()tidak valid di sini karena method membutuhkan objek dan bukan statis; pilihlah jenis field dan method berdasarkan tanggung jawabnya.
Panggilan mana yang paling baik menunjukkan bahwa getCount() adalah method static dari Student?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Student.getCount() jelas menyebut nama kelas. Java juga memungkinkan student.getCount() untuk method static, tetapi penulisan itu menyamarkan makna tingkat kelasnya.
Prediksikan salinan referensi
- Dimulai dengan dua siswa yang dibangun,
Student alias = a;meninggalkan jumlah konstruksi pada 2.alias.setScore(90)mengubah objek Ada yang sudah ada, sehinggaa.getScore()bernilai 90 dan skor Bo tetap 75. - Hitung eksekusi
new Student(...), lalu jejak keadaan setiap objek secara terpisah. Pemanggilan aksesor maupun penugasan referensi tidak membuat siswa, dan method statis masih dapat membaca objek yang disuplai secara eksplisit.
Field statis menyimpan keadaan kelas; field instance menyimpan keadaan objek. Method statis tidak memiliki this, tetapi dapat menggunakan referensi objek eksplisit. Pilihlah pemanggilan statis yang dikualifikasi kelas dan bedakan antara jumlah konstruksi dan jumlah objek aktif.
Dua siswa telah dikonstruksi, jadi count adalah 2. Kemudian Student alias = a; dan alias.setScore(90); dijalankan. Berapakah Student.getCount()?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Baik penugasan referensi maupun perubahan skor tidak mengeksekusi constructor. Count tetap 2.
Konter pembuat ini otomatis berkurang ketika referensi ke siswa hilang.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Hanya kode yang mengubah count yang benar-benar mengubahnya. Contoh ini menghitung konstruksi dan tidak menyediakan pengurangan.