Kuidas töötavad Java staatilised väljad

Mõnikord võib olla kasulik, kui väärtusi jagatakse kindla klassi kõigil esinemisjuhtudel. Staatilised väljad ja staatilised konstandid luba seda tüüpi jagamist kuulumisega klass ja mitte tegelike objektide suhtes.

Staatiline modifikaator

Tavaliselt saab klassis määratletud väljade ja meetodite kasutamist ainult siis, kui selle klassitüübi objekt on loodud. Näiteks kaaluge lihtsat kaubaklassi, mis jälgib kaupu kaupluses:

 avaliku klassi objekt {

 privaatne Stringi itemName;


 avalik üksus (stringi üksuse nimi)

 {

 this.itemName = itemName;

 }


 avalik stringi getItemName ()

 {

 tagastama itemName;

 }

 } 

GetItemName () meetodi kasutamiseks peame kõigepealt looma üksuse objekti, antud juhul catFood:

 avalik klass StaticExample {


 avalik staatiline tühine pea (string [] args) {

 Toode catFood = uus toode ("Whiskas");

 System.out.println (catFood.getItemName ());

 }

 } 

Kui aga staatiline modifikaator on lisatud välja või meetodi deklaratsiooni, pole ühtegi klassi eksemplari vajalik välja või meetodi kasutamiseks - nad on seotud klassiga, mitte üksikisikuga objekt. Ülaltoodud näitele tagasi vaadates näete, et staatilist modifikaatorit juba kasutatakse seadmes

instagram viewer
põhimeetodi deklaratsioon:

 avalik staatiline tühine pea (string [] args) { 

peamine meetod on staatiline meetod mis ei eelda objekti olemasolu enne, kui seda saab nimetada. Kuna peamine () on kõigi Java-rakenduste lähtepunkt, pole tegelikult ühtegi objekti, mis seda kutsuks, juba olemas. Kui tunneksite, et teil on pidevalt end nimetav programm, võiksite seda teha:

 avalik klass StaticExample {


 avalik staatiline tühine pea (string [] args) {


 String [] s = {"juhuslik", "string"};

 StaticExample.main (s);

 }

 }


Pole eriti kasulik, kuid pange tähele, kuidas saab peamist () meetodit kutsuda ilma StaticExample klassi eksemplarita.

Mis on staatiline väli?

Staatilisi välju tuntakse ka klassiväljadena. Need on lihtsalt väljad, mille deklaratsioonides on staatiline modifikaator. Naaskem näiteks üksuse klassi ja lisage staatiline väli:

 avaliku klassi objekt {


 // staatiline väli uniqueId

 privaatne staatiline int uniId = 1;


 privaatne intIdId;

 privaatne Stringi itemName;


 avalik üksus (stringi üksuse nimi)

 {

 this.itemName = itemName;

 itemId = ainulaadneId;

 unikaalneId ++;

 }

 }


Väljad itemId ja itemName on tavalised mittestaatilised väljad. Üksuse klassi eksemplari loomisel on nendel väljadel väärtused, mida hoitakse selle objekti sees. Kui luuakse mõni teine ​​objektiobjekt, on sellel ka väärtuste salvestamiseks väljad itemId ja itemName.

Staatilisel väljal uniqueId on aga väärtus, mis on kõigil üksuse objektidel ühesugune. Kui on 100 üksuseobjekti, on väljade itemId ja itemName puhul 100 eksemplari, kuid ainult üks staatiline väli unikalId.

Ülaltoodud näites kasutatakse üksust unikalId, et anda igale objektiobjektile kordumatu number. Seda on lihtne teha, kui iga loodav objektiobjekt võtab staatilisel väljal unikalId praeguse väärtuse ja suurendab seda ühe võrra. Staatilise välja kasutamine tähendab, et a-objekti saamiseks ei pea iga objekt teadma teisi objekte unikaalne id. See võib olla kasulik, kui soovite teada objekti objektide loomise järjekorda.

Mis on staatiline konstant?

Staatilised konstandid on täpselt nagu staatilised väljad, välja arvatud see, et nende väärtusi ei saa muuta. Põllu deklaratsioonis märgitakse lõplik ja staatiline kasutatakse nii modifikaatoreid. Näiteks peaks artikliklass kehtestama itemName pikkusele piirangu. Võiksime luua staatilise konstantse maxItemNameLength:

 avaliku klassi objekt {


 privaatne staatiline int id = 1;

 avalik staatiline lõplik int maxItemNameLength = 20;


 privaatne intIdId;

 privaatne Stringi itemName;


 avalik üksus (stringi üksuse nimi) 

 {

 if (itemName.length ()> maxItemNameLength)

 {

 this.itemName = itemName.string (0,20);

 }

 muud

 {

 this.itemName = itemName;

 }

 itemId = id;

 id ++;

 } } 

Nagu staatiliste väljade puhul, on ka staatilised konstandid seotud klassiga, mitte üksikobjektiga:

 avalik klass StaticExample {


 avalik staatiline tühine pea (string [] args) {


 Toode catFood = uus toode ("Whiskas");

 System.out.println (catFood.getItemName ());

 System.out.println (Item.maxItemNameLength);

 }

 }


Staatilise konstandi maxItemNameLength juures tuleb tähele panna kahte olulist asja:

  • See on kuulutatud avalikuks väljaks. Üldiselt on halb mõte teha väli avalikuks ükskõik millises teie kujundatud klassis, kuid sel juhul pole sellel vahet. Konstandi väärtust ei saa muuta.
  • Staatilist konstanti kasutatakse klassi nimest Üksus, mitte Objekt.

Staatilisi konstante saab näha kogu Java API-s. Näiteks täisarv mähkimisklass on kaks, mis salvestavad maksimaalse ja minimaalse väärtuse int andmetüüp võib olla:

 System.out.println ("Int maksimaalne väärtus on:" + täisarv. MAX_VALUE);

 System.out.println ("Int min väärtus on:" + täisarv. MIN_VALUE);


 Väljund:

 Int maksimaalne väärtus on: 2147483647

 Int min väärtus on: -2147483648


instagram story viewer