Kako delujejo statična polja v Javi

Včasih je koristno imeti vrednosti, ki se delijo na vse primerke določenega razreda. Statična polja in statične konstante omogočite to vrsto skupne rabe s pripadnostjo razred in ne dejanskim predmetom.

Statični modifikator

Običajno se polja in metode, definirane v razredu, lahko uporabljajo samo, če je bil ustvarjen predmet tega razreda. Na primer, razmislite o preprostem razredu izdelkov, ki sledi trgovini v trgovini:

 Postavka za javni razred {

 zasebno String itemName;


 javni element (String itemName)

 {

 this.itemName = itemName;

 }


 javni niz getItemName ()

 {

 povratni elementName;

 }

 } 

Če želite uporabiti metodo getItemName (), moramo najprej ustvariti objekt Item, v tem primeru catFood:

 javni razred StaticExample {


 javni statični void main (String [] args) {

 Item catFood = nov element ("Whiskas");

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

 }

 } 

Če pa je statični modifikator vključen v deklaracijo polja ali metode, noben primerek razreda ni potrebna za uporabo polja ali metode - so povezana z razredom in ne s posameznikom objekt. Če se ozrete na zgornji primer, boste videli, da se statični modifikator že uporablja v

instagram viewer
deklaracija glavne metode:

 javnosti statična void main (String [] argumenti) { 

The glavna metoda je statična metoda ki ne zahteva, da predmet obstaja, preden ga je mogoče poklicati. Ker je main () izhodišče za katero koli aplikacijo Java, v resnici še ni predmetov, ki bi ga klicali. Če bi se vam zazdelo, da imate program, ki sam sebe stalno kliče, to storite:

 javni razred StaticExample {


 javni statični void main (String [] args) {


 String [] s = {"naključno", "string"};

 StaticExample.main (i);

 }

 }


Ni zelo koristno, vendar opazite, kako lahko glavno metodo () pokličete brez primerka razreda StaticExample.

Kaj je statično polje?

Statična polja so znana tudi kot razredna polja. To so preprosto polja, ki imajo statični modifikator v svojih deklaracijah. Na primer vrnimo se v razred Item in dodamo statično polje:

 Postavka za javni razred {


 // statično polje uniqueId

 zasebni statični int uniqueId = 1;


 private int itemId;

 zasebno String itemName;


 javni element (String itemName)

 {

 this.itemName = itemName;

 itemId = uniqueId;

 uniqueId ++;

 }

 }


Polji itemId in itemName sta običajna nestatična polja. Ko se ustvari primerek razreda Item, bodo ta polja imela vrednosti, ki so shranjene znotraj tega predmeta. Če je ustvarjen še en predmet Item, bo imel tudi polja itemId in itemName za shranjevanje vrednosti.

Statično polje jedinstvenega ID-ja pa vsebuje vrednost, ki bo enaka za vse predmete predmeta. Če je 100 predmetov predmeta, bo 100 primerov polja itemId in itemName, vendar le eno edinstveno statično polje.

V zgornjem primeru je uporabljen uniqueId, da vsakemu predmetu predmeta dodeli edinstveno številko. To je enostavno storiti, če vsak ustvarjen predmet Item prevzame trenutno vrednost v statičnem polju uniqueId in ga nato poveča za eno. Uporaba statičnega polja pomeni, da vsakemu predmetu ni treba vedeti za druge predmete, da bi dobili edinstven id. To bi lahko bilo koristno, če bi radi izvedeli, v kakšnem vrstnem redu so bili ustvarjeni predmeti.

Kaj je statična konstanta?

Statične konstante so povsem podobne statičnim poljem, le da njihovih vrednosti ni mogoče spremeniti. V deklaraciji na terenu je zapisano končna in statična uporabljajo se modifikatorji. Na primer, morda bi moral element Item omejitev dolžine name. Lahko bi ustvarili statično konstanto maxItemNameLength:

 Postavka za javni razred {


 zasebni statični int id = 1;

 javni statični končni int maxItemNameLength = 20;


 private int itemId;

 zasebno String itemName;


 javni element (String itemName) 

 {

 če (itemName.length ()> maxItemNameLength)

 {

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

 }

 drugače

 {

 this.itemName = itemName;

 }

 itemId = id;

 id ++;

 } } 

Tako kot pri statičnih poljih so tudi statične konstante povezane z razredom in ne s posameznim objektom:

 javni razred StaticExample {


 javni statični void main (String [] args) {


 Item catFood = nov element ("Whiskas");

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

 System.out.println (Item.maxItemNameLength);

 }

 }


Pri statični konstanti maxItemNameLength je treba opaziti dve pomembni stvari:

  • Razglašen je za javno polje. Na splošno je slaba ideja, da se objavi na terenu v katerem koli razredu, ki ga oblikujete, vendar v tem primeru ni pomembno. Vrednosti konstante ni mogoče spremeniti.
  • Statična konstanta se uporablja iz imena razreda Item, ne pa predmeta predmeta.

Statične konstante lahko vidimo v celotnem Java API-ju. Na primer celoten razred ovoja ima dve, ki shranjujeta največjo in najmanjšo vrednost int vrsta podatkov lahko ima:

 System.out.println ("Najvišja vrednost za int je:" + Integer. MAX_VALUE);

 System.out.println ("Minimalna vrednost za int je:" + Integer. MIN_VALUE);


 Izhod:

 Najvišja vrednost za int je: 2147483647

 Minimalna vrednost za int je: -2147483648


instagram story viewer