"Mari beralih ke topik baru. Sekarang, saya ingin membahas variabel dan metode statis."

"Ellie, aku sudah belajar tentang variabel dan metode statis. Tapi aku ingin mempelajari lebih detail."

"Ketika kita mendeklarasikan variabel dalam sebuah kelas, kita menentukan apakah variabel ini akan dibuat sekali saja, atau jika setiap instance (objek) dari kelas akan memiliki salinannya sendiri. Secara default, salinan baru dari sebuah variabel dibuat untuk setiap objek . Begini tampilannya:"

Deklarasi kelas
class Cat                        // Class
{
    String name;                 // Variable

    Cat(String name)             // Constructor
    {
        this.name = name;        // Variable initialization
    }
}
Kode dalam metode utama :
Cat cat1 = new Cat("Oscar"); // Create one object whose name variable contains "Oscar"
Cat cat2 = new Cat("Missy"); // Create one object whose name variable contains "Missy"
System.out.println(cat1.name);
System.out.println(cat2.name);
Keluaran layar
Oscar
Missy

"Meskipun dideklarasikan di kelas yang sama (Cat), variabel cat1.namedan cat2.namenilainya berbeda karena mereferensikan objek yang berbeda."
"Itu masuk akal."
"Namun, hanya ada satu salinan variabel statis untuk setiap instance kelas, dan itu harus diakses menggunakan nama kelas."

Deklarasi kelas
class Cat                   // Сlass
{
    String name;            // Instance (non-static) variable
    static int catCount;    // Static variable

    Cat(String name)
    {
        this.name = name;
        Cat.catCount++;   // Increment the static variable by 1
    }
}
Kode dalam metode utama:
System.out.println(Cat.catCount);
Cat cat1 = new Cat("Oscar");

System.out.println(Cat.catCount);
Cat cat2 = new Cat("Missy");

System.out.println(cat1.name);
System.out.println(cat2.name);
System.out.println(Cat.catCount);
Keluaran layar:
0
1
Oscar
Missy
2

"Oke, itu juga masuk akal."

"Metode Java dibagi menjadi dua kategori. Metode instan dipanggil pada sebuah objek dan memiliki akses ke data objek tersebut. Metode statis tidak memiliki akses tersebut, karena mereka tidak memiliki referensi objek. Namun, mereka dapat mereferensikan variabel statis kelas dan metode statis lainnya.

Metode statis tidak dapat mengatasi metode non-statis atau variabel non-statis!"

"Kenapa begitu, Ellie?"

"Setiap variabel instan terkandung dalam sebuah objek. Itu hanya dapat diakses jika Anda memiliki referensi ke objek itu. Tidak ada referensi seperti itu yang tersedia untuk metode statis."

"Apakah metode instance memiliki referensi seperti itu?"

"Ya, ini diteruskan ke metode instan secara tidak langsung. Referensi ke objek yang memanggil metode instan secara tidak langsung diteruskan ke metode instan. Variabel yang menyimpan referensi ini disebut this . Hal ini memungkinkan metode untuk selalu mengakses objek data atau panggil metode non-statis lain pada objek yang sama.

Alih-alih referensi objek, null diteruskan ke metode statis. Itu sebabnya mereka tidak dapat mengatasi variabel dan metode non-statis. Mereka tidak memiliki referensi ke objek yang terkait dengan variabel dan metode ini."

"Oke, Ellie, aku mengerti itu."

"Beginilah cara kerja metode non-statis:

Seperti apa kodenya
Cat cat = new Cat();
String name = cat.getName();
cat.setAge(17);
cat.setChildren(cat1, cat2, cat3);
Apa yang sebenarnya terjadi
Cat cat = new Cat();
String name = Cat.getName(cat);
Cat.setAge(cat, 17);
Cat.setChildren(cat, cat1, cat2, cat3);
Saat Anda memanggil metode menggunakan <objek> dot <nama metode>, Anda sebenarnya memanggil metode kelas dan meneruskan objek yang sama sebagai argumen pertama. Di dalam metode, objek disebut 'ini' . Semua operasi dalam metode dilakukan pada objek ini dan datanya."

"Beginilah cara kerja metode statis:

Seperti apa kodenya
Cat cat1 = new Cat();
Cat cat2 = new Cat();
int catCount = Cat.getAllCatsCount();
Apa yang sebenarnya terjadi
Cat cat1 = new Cat();
Cat cat2 = new Cat();
int catCount = Cat.getAllCatsCount(null);
Saat Anda memanggil metode statis, tidak ada objek yang diteruskan ke sana. Dengan kata lain, 'ini' sama dengan null . Itu sebabnya metode statis tidak dapat mengakses variabel dan metode non-statis (karena tidak ada yang secara implisit diteruskan ke metode non-statis)."

"Variabel atau metode bersifat statis jika memiliki kata kunci statis di depannya."

"Mengapa metode seperti itu diperlukan jika sangat terbatas?"

"Yah, metode seperti itu memang ada manfaatnya."

"Pertama, kita tidak harus meneruskan referensi objek untuk menggunakan metode dan variabel statis. "

"Kedua, terkadang diperlukan untuk memiliki satu dan hanya satu salinan variabel. Misalnya, System.out (variabel keluar statis dari kelas Sistem)."

"Ketiga, terkadang Anda perlu memanggil metode sebelum Anda dapat membuat objek."

"Ellie, bisakah kamu memberiku contoh tentang ini?"

"Mengapa menurut Anda metode main() itu statis? Ini statis sehingga pemrogram dapat memanggilnya segera setelah memuat kelas ke dalam memori, sebelum objek apa pun dibuat."