1. Mga static na variable
Kapag ang isang klase ay na-load sa memorya ng isang static na bagay ay nilikha kaagad. Ang bagay na ito ay nag-iimbak ng mga static na variable ng klase (static na mga field ng klase). Ang static na bagay ay umiiral kahit na walang ordinaryong (non-static) na mga bagay ng klase ang nalikha.
Kapag nagdedeklara kami ng mga variable sa isang klase, ipinapahiwatig namin kung isang beses lang gagawin ang mga ito, o kung dapat may mga natatanging pagkakataon ng mga variable na ito sa bawat object. Bilang default, ang isang bagong kopya ng bawat variable ay nilikha para sa bawat bagay.
Ang isang static na variable ay nakatali sa static na object ng klase at palaging may isang pagkakataon nito.
Upang lumikha ng isang static na variable sa isang klase, kailangan mong isulat ang static
keyword bago ang pangalan nito. Ang pangkalahatang format para sa pagdedeklara ng isang static na variable ay:
static Type name = value;
Kung ang isang static na variable ay hindi nakatalaga ng isang paunang halaga, ito ay sinisimulan ng isang default na halaga:
Uri | Default na halaga |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
(katulad ng
) |
|
|
at anumang klase |
|
Mga halimbawa:
Code | Tandaan |
---|---|
|
|
|
|
|
|
|
|
|
Sa loob ng isang klase, maaari kang sumangguni sa mga static na variable nito sa pamamagitan lamang ng paggamit ng kanilang mga pangalan. Ngunit upang ma-access ang mga ito mula sa ibang klase, kailangan mong isulat ang pangalan ng klase bago ang pangalan ng static na variable.
ClassName.variable
Halimbawa:
Variable | Klase | Pag-access sa isang variable sa labas ng klase nito |
---|---|---|
|
|
|
|
|
|
|
|
Ang variable ay private . Hindi ito nakikita sa labas ng klase. |
|
|
Ang variable ay private . Hindi ito nakikita sa labas ng klase. |
|
|
Ang variable ay private . Hindi ito nakikita sa labas ng klase. |
2. Pagkakaiba sa pagitan ng mga static at non-static na variable
Ang mga di-static (ordinaryo) na variable ng isang klase ay idineklara sa parehong paraan tulad ng mga static, kung wala lang ang static
keyword.
Ano ang pagkakaiba sa pagitan ng mga ordinaryong variable at static na variable?
Ang mga karaniwang variable ng isang klase ay nakatali sa mga bagay ng klase (mga pagkakataon ng klase), habang ang mga static na variable ay nakatali sa static na bagay ng klase.
Kung mayroong maraming mga pagkakataon ng isang klase, bawat isa sa kanila ay may sariling kopya ng mga hindi static (ordinaryong) variable. Ang mga static na variable ng isang klase ay palaging naka-imbak sa static na object nito at iisang instance lang ng mga ito ang umiiral.
Maa-access mo lang ang mga ordinaryong variable (mga patlang) ng isang klase kung mayroon kang reference sa isang object ng klase. At sa loob ng mga pamamaraan ng klase, siyempre.
Halimbawa:
Pag-access sa isang field ng isang klase gamit ang isang object reference |
---|
|
Maaari mong ma-access ang mga static na variable mula sa kahit saan (pagkatapos ng accounting para sa mga modifier ng visibility): mula sa mga ordinaryong pamamaraan, mula sa mga static na pamamaraan ng parehong klase, mula sa mga pamamaraan ng iba pang mga klase, atbp.
Halimbawa:
Pag-access sa isang static na field ng isang klase nang hindi gumagamit ng object reference |
---|
|
Paano nakaayos ang memorya:
Sabihin nating mayroon tayong Person
klase na may 4 na field: dalawa ang static at dalawa ang hindi.
public class Person
{
public static int count = 0;
public static int sum = 0;
public int age = 0;
public String name;
}
Kaagad pagkatapos i-load ang klase
Kapag natapos na ng Java machine ang pag-load ng Person
klase, magiging ganito ang memorya:
Matapos malikha ang unang bagay
Kung lumikha tayo ng isang Person
bagay, ang larawan ay magiging ganito:
Pakitandaan na kahit na ang parehong mga bagay ay may dalawang mga variable, ang mga ito ay magkaibang mga variable: ang mga ordinaryong bagay ay may mga ordinaryong variable, at ang static na bagay ay may mga static na variable.
Kailangan namin ng higit pang mga bagay
Gumawa tayo ng dalawa pang Person
bagay. Ngayon ang memorya ay magiging ganito:
Pakitandaan na ang bawat bagay ay may sariling mga variable ng edad at pangalan.
3. Pag-alis at pagdaragdag ng static
modifier
Mula static hanggang karaniwan
Ano ang mangyayari kung kukuha tayo ng static na variable at gagawin itong ordinaryo sa pamamagitan ng pag-alis ng static
modifier nito? Halimbawa, ang static int sum
variable.
Ang binagong code ay magiging ganito:
public class Person
{
public static int count = 0;
public int sum = 0;
public int age = 0;
public String name;
}
Ngayon ang memorya ay ganito ang hitsura:
Ang static na variable ay nawala mula sa static na bagay, at ngayon ang bawat ordinaryong bagay ay may sariling sum
variable.
Mula karaniwan hanggang static
Maaari nating gawin ang kabaligtaran: idagdag ang static
modifier sa mga ordinaryong variable ng isang klase. Mawawala ang mga ito sa lahat ng ordinaryong bagay at lilitaw sa static na bagay. Ipagpalagay na nagpasya kaming gawing static ang age
mga name
variable. Pagkatapos ang code ay magiging ganito:
public class Person
{
public static int count = 0;
public int sum = 0;
public static int age = 0;
public static String name;
}
At ngayon ang memorya ay magiging ganito:

GO TO FULL VERSION