"Let's move on to a new topic. Now, I'd like to discuss static variables and methods."

"Ellie, natutunan ko na ang tungkol sa mga static na variable at pamamaraan. Pero gusto kong matuto ng higit pang mga detalye."

"Kapag nagdeklara kami ng mga variable sa isang klase, tinutukoy namin kung ang mga variable na ito ay gagawin nang isang beses lang, o kung ang bawat instance (object) ng klase ay magkakaroon ng sarili nitong kopya. Bilang default, isang bagong kopya ng isang variable ang nilikha para sa bawat object . Ganito ang hitsura:"

Deklarasyon ng klase
class Cat                        // Class
{
    String name;                 // Variable

    Cat(String name)             // Constructor
    {
        this.name = name;        // Variable initialization
    }
}
Code sa pangunahing pamamaraan:
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);
Output ng screen
Oscar
Missy

"Sa kabila ng idineklara sa parehong klase (Cat), ang mga variable cat1.nameat cat2.namenaglalaman ng iba't ibang mga halaga dahil tinutukoy nila ang iba't ibang mga bagay."
"Iyan ang akma."
"Gayunpaman, isang kopya lamang ng isang static na variable ang umiiral para sa bawat pagkakataon ng isang klase, at dapat itong ma-access gamit ang pangalan ng klase."

Deklarasyon ng klase
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
    }
}
Code sa pangunahing pamamaraan:
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);
Output ng screen:
0
1
Oscar
Missy
2

"OK, may katuturan din yan."

"Ang mga pamamaraan ng Java ay nahahati sa dalawang kategorya. Ang mga pamamaraan ng halimbawa ay tinatawag sa isang bagay at may access sa data ng bagay na iyon. Walang ganoong access ang mga static na pamamaraan , dahil wala silang isang object reference. Gayunpaman, maaari nilang i-reference ang mga static na variable ng klase at iba pang mga static na pamamaraan.

Ang mga static na pamamaraan ay hindi maaaring tumugon sa mga hindi static na pamamaraan o hindi static na mga variable!"

"Bakit ba, Ellie?"

"Ang bawat instance variable ay nakapaloob sa isang object. Maa-access lang ito kung mayroon kang reference sa object na iyon. Walang ganoong reference na available sa isang static na paraan."

"May ganitong reference ba ang mga instance method?"

"Oo, hindi direktang ipinapasa ito sa mga pamamaraan ng instance. Ang isang reference sa object kung saan tinatawag ang isang instance method ay hindi direktang ipinapasa sa instance method. Ang variable na nag-iimbak ng reference na ito ay tinatawag na ito . data o tumawag ng isa pang non-static na pamamaraan sa parehong bagay.

Sa halip na isang object reference, ang null ay ipinapasa sa mga static na pamamaraan. Iyon ang dahilan kung bakit hindi nila matugunan ang mga di-static na variable at pamamaraan. Wala silang reference sa isang bagay na nauugnay sa mga variable at pamamaraan na ito."

"Okay, Ellie, naiintindihan ko."

"Ganito gumagana ang mga non-static na pamamaraan:

Ano ang hitsura ng code
Cat cat = new Cat();
String name = cat.getName();
cat.setAge(17);
cat.setChildren(cat1, cat2, cat3);
Kung ano talaga ang nangyayari
Cat cat = new Cat();
String name = Cat.getName(cat);
Cat.setAge(cat, 17);
Cat.setChildren(cat, cat1, cat2, cat3);
Kapag tumawag ka ng isang paraan gamit ang <object> dot <method name>, talagang tumatawag ka sa isang class method at ipinapasa ang parehong object bilang ang unang argumento. Sa loob ng pamamaraan, ang bagay ay tinatawag na 'ito' . Ang lahat ng mga operasyon sa pamamaraan ay ginagawa sa bagay na ito at sa data nito."

"Narito kung paano gumagana ang mga static na pamamaraan:

Ano ang hitsura ng code
Cat cat1 = new Cat();
Cat cat2 = new Cat();
int catCount = Cat.getAllCatsCount();
Kung ano talaga ang nangyayari
Cat cat1 = new Cat();
Cat cat2 = new Cat();
int catCount = Cat.getAllCatsCount(null);
Kapag tumawag ka ng isang static na pamamaraan, walang bagay na ipinapasa dito. Sa madaling salita, 'ito' ay katumbas ng null . Iyon ang dahilan kung bakit hindi maa-access ng isang static na pamamaraan ang mga hindi static na variable at pamamaraan (dahil wala itong implicitly na ipasa sa mga non-static na pamamaraan)."

"Ang isang variable o paraan ay static kung ito ay may keyword na static sa harap nito."

"Bakit kailangan ang mga ganitong pamamaraan kung ang mga ito ay lubhang limitado?"

"Buweno, ang mga ganitong pamamaraan ay may kanilang mga pakinabang."

"Una, hindi namin kailangang magpasa ng object reference para gumamit ng mga static na pamamaraan at variable. "

"Pangalawa, kung minsan ay kinakailangan na magkaroon ng isa at isang kopya lamang ng isang variable. Halimbawa, System.out (ang static out variable ng klase ng System)."

"Ikatlo, minsan kailangan mong tumawag ng isang paraan bago ka makalikha ng mga bagay."

"Ellie, pwede mo ba akong bigyan ng halimbawa nito?"

"Sa tingin mo, bakit static ang main() method? Static ito para matawag agad ito ng programmer pagkatapos mag-load ng class sa memorya, bago magawa ang anumang bagay."