1. Mga static na pamamaraan
Bilang karagdagan sa mga static na variable, ang mga klase ay maaari ding magkaroon ng mga static na pamamaraan.
Ang mga regular na pamamaraan ay nakatali sa mga bagay (mga pagkakataon) ng isang klase at maaaring sumangguni sa mga ordinaryong (hindi static) na mga variable ng klase (pati na rin ang mga static na variable at pamamaraan ). Ang mga static na pamamaraan ay nakatali sa static na object ng klase at maaari lamang ma-access ang mga static na variable at/o iba pang mga static na pamamaraan ng klase.
Upang tumawag ng isang ordinaryong (non-static) na pamamaraan sa isang klase, kailangan mo munang lumikha ng isang bagay ng klase at pagkatapos ay tawagan ang pamamaraan sa bagay. Hindi ka maaaring tumawag ng isang ordinaryong pamamaraan sa klase sa halip na isang bagay.
Halimbawa:
Hindi ka maaaring tumawag ng isang non-static na pamamaraan sa isang klase! |
---|
|
Ngunit upang tumawag ng isang static na pamamaraan, sapat na para sa static na bagay ng klase na umiral lamang (at ito ay palaging umiiral pagkatapos na mai-load ang klase sa memorya). Ito ang dahilan kung bakit ang pangunahing() na pamamaraan ay static. Nakatali ito sa static na object ng klase, kaya hindi mo na kailangang lumikha ng anumang mga bagay upang tawagan ito.
Upang magdeklara ng static na pamamaraan, kailangan mong isulat ang static na keyword bago ang header ng pamamaraan. Ang pangkalahatang hitsura ng konstruksyon na ito ay ang mga sumusunod:
static Type name(parameters)
{
method code
}
Mga halimbawa:
Code | Tandaan |
---|---|
|
Tinatawag ng Java machine ang main pamamaraan na may utos na tulad nito: Solution.main() ; Ang static test() na pamamaraan ay tinatawag sa static main() na pamamaraan. |
Upang tumawag ng static na paraan mula sa ibang klase, kailangan mong tukuyin ang pangalan ng klase bago ang pangalan ng static na paraan. Ang pangkalahatang hitsura ng konstruksyon na ito ay ang mga sumusunod:
Type name = ClassName.methodName(arguments)
Mga halimbawa:
Code | Static na pamamaraan |
---|---|
|
|
|
|
|
|
2. Static vs ordinary (non-static) na mga pamamaraan
Ano ang pagkakaiba sa pagitan ng mga static na pamamaraan at mga ordinaryong?
Ang isang ordinaryong pamamaraan ay nakatali sa isang ordinaryong bagay (isang halimbawa ng isang klase), habang ang isang static na pamamaraan ay hindi. Maaaring ma-access ng isang ordinaryong paraan ang mga variable sa instance nito, ngunit hindi maaaring ma-access ng static na paraan: wala lang itong nauugnay na instance.
Ang mga pagkakaiba sa pagitan ng dalawang uri ng mga pamamaraan ay ipinahayag sa sumusunod na talahanayan:
Kakayahan/pag-aari | Ordinaryong pamamaraan | Static na pamamaraan |
---|---|---|
Nakatali sa isang instance ng klase | Oo | Hindi |
Maaaring tumawag ng mga ordinaryong pamamaraan ng klase | Oo | Hindi |
Maaaring tumawag sa mga static na pamamaraan ng klase | Oo | Oo |
Maaaring ma-access ang mga ordinaryong variable ng klase | Oo | Hindi |
Maaaring ma-access ang mga static na variable ng klase | Oo | Oo |
Maaaring tawagin sa isang bagay | Oo | Oo |
Maaaring tawagin sa klase | Hindi | Oo |
Bakit kailangan ang gayong mga pamamaraan kung ang mga ito ay lubhang limitado? Ang sagot ay ang pamamaraang ito ay mayroon ding mga pakinabang.
Una, hindi mo kailangang ipasa ang anumang object reference upang ma-access ang mga static na pamamaraan at variable.
Pangalawa, kung minsan kailangan mo doon upang maging isang solong halimbawa ng isang variable. Halimbawa, System.out
( static out variable ng klase ng System ).
At, pangatlo, kung minsan kailangan mong tumawag ng isang paraan bago ito maging posible na lumikha ng mga bagay. Halimbawa, tinatawag ng Java machine ang pangunahing() na pamamaraan upang simulan ang pagpapatupad ng programa bago pa man malikha ang isang halimbawa ng klase.
Nakatali sa isang instance ng klase
Kapag tinawag ang isang ordinaryong pamamaraan, ang isang argumento — ang bagay kung saan tinawag ang pamamaraan — ay tahasang ipinapasa dito. Ang parameter na ito ay tinatawag na this
. Ang implicit na parameter na ito (isang sanggunian sa bagay kung saan tinatawag ang pamamaraan) ay nakikilala ang mga ordinaryong pamamaraan mula sa mga static.
Walang ganitong implicit na parameter ang mga static na pamamaraan, kaya hindi mo magagamit ang this
keyword sa loob ng mga static na pamamaraan, at hindi ka makakatawag ng non-static na paraan sa loob ng static na paraan. Wala talagang makukuhang reference sa isang instance ng isang klase.
Maaaring tumawag ng mga ordinaryong pamamaraan ng klase
Ang isang ordinaryong pamamaraan ay laging may implicit this
na parameter, kaya palagi kang mayroong reference sa object kung saan tinatawag ang method. Sa tuwing tatawag ka ng isang ordinaryong paraan sa loob ng isa pang ordinaryong pamamaraan, ang implicit this
na parameter ay ginagamit upang gawin ang tawag na iyon. Halimbawa
Code | Paano ito gumagana |
---|---|
|
|
Iyon ang dahilan kung bakit hindi ka maaaring tumawag ng isang ordinaryong pamamaraan mula sa isang static. Walang implicit na variable na pinangalanan this
sa loob ng isang static na pamamaraan.
O isipin ang isa pang sitwasyon: wala pang isang bagay ng aming klase ang nalikha sa aming programa. Maaari ba tayong tumawag ng isang static na pamamaraan ng ating klase? Oo. At maaari bang tumawag ang static na pamamaraan na ito ng isang ordinaryong (non-static) na pamamaraan?
Buweno, anong bagay ang itatawag natin dito? Pagkatapos ng lahat, wala pang isang halimbawa ng aming klase!
Maaaring tumawag sa mga static na pamamaraan ng klase
Maaaring tawagan ang mga static na pamamaraan mula sa kahit saan — mula sa anumang lugar sa programa. Nangangahulugan ito na maaari silang tawagan mula sa parehong mga static na pamamaraan at mga ordinaryong. Walang mga paghihigpit dito.
Maaaring ma-access ang mga ordinaryong variable ng klase
Maaari mong ma-access ang mga ordinaryong variable ng isang klase mula sa isang ordinaryong pamamaraan, dahil madali itong makakuha ng reference sa isang instance ng klase sa pamamagitan ng implicit na this
parameter.
Ang isang static na pamamaraan ay hindi alam kung aling instance ng klase ang dapat nitong gamitin upang makakuha ng mga halaga ng mga ordinaryong variable. At higit sa pangkalahatan, madali tayong magkaroon ng sitwasyon kung saan tinatawag ang isang static na pamamaraan ngunit wala pang isang pagkakataon ng klase ang nalikha sa programa.
Bilang resulta, hindi ma-access ng mga static na pamamaraan ang mga ordinaryong variable ng isang klase.
Ipagpalagay na ang isang static na pamamaraan ay tumatawag sa isang ordinaryong pamamaraan. Anong bagay ang dapat itawag sa ordinaryong pamamaraang iyon?

Walang nakakaalam! Iyon ang dahilan kung bakit hindi ka maaaring tumawag ng isang ordinaryong pamamaraan mula sa isang static nang hindi nagpapasa sa isang reference sa isang bagay!
Maaaring ma-access ang mga static na variable ng klase
Ang sitwasyon sa mga tawag sa mga static na variable ay kapareho ng sa mga tawag sa mga static na pamamaraan. Maaaring ma-access ang mga static na variable mula saanman sa programa. Nangangahulugan iyon na maaari mong ma-access ang mga ito mula sa mga static at ordinaryong pamamaraan.
Maaaring tawagin sa isang bagay
Parehong static at ordinaryong mga pamamaraan ay maaaring tawagin sa isang bagay. Posible ang isang ordinaryong tawag sa pamamaraan — sa katunayan, iyon ang tanging paraan upang tumawag sa isang ordinaryong paraan. Ang isang static na pamamaraan ay maaari ding tawagan sa isang bagay: sa kasong ito ang compiler mismo ang tumutukoy sa uri ng variable at tinatawag ang static na pamamaraan batay sa uri nito:
Code | Paano ito nakikita ng compiler |
---|---|
|
|
|
|
|
|
Maaaring tawagin sa klase
Maaari kang tumawag lamang ng isang static na pamamaraan sa isang klase. Upang tumawag sa isang ordinaryong pamamaraan, kailangan mo ng isang sanggunian sa isang halimbawa ng klase. Samakatuwid, hindi ka maaaring tumawag ng isang ordinaryong pamamaraan gamit ang construct na ito:ClassName.methodName(arguments)
GO TO FULL VERSION