Môžu nastať situácie, keď je užitočné mať hodnoty zdieľané vo všetkých inštanciách konkrétnej triedy. Statické polia a statické konštanty umožniť tento typ zdieľania tým, že patrí do trieda a nie na skutočné objekty.
Statický modifikátor
Normálne sa polia a metódy definované v triede môžu použiť iba vtedy, keď sa vytvoril objekt tohto typu triedy. Zvážte napríklad jednoduchú triedu položiek, ktorá sleduje tovar v obchode:
položka verejnej triedy {
private String itemName;
verejná položka (String itemName)
{
this.itemName = itemName;
}
public String getItemName ()
{
návrat itemName;
}
}
Aby sme mohli použiť metódu getItemName (), musíme najprv vytvoriť objekt Item, v tomto prípade catFood:
verejná trieda StaticExample {
public static void main (String [] args) {
Item catFood = nová položka („Whiskas“);
System.out.println (catFood.getItemName ());
}
}
Ak je však statický modifikátor zahrnutý vo vyhlásení poľa alebo metódy, žiadna inštancia triedy nie je potrebné na použitie poľa alebo metódy - sú spojené s triedou a nie s jednotlivcom objekt. Ak sa pozriete späť na vyššie uvedený príklad, uvidíte, že statický modifikátor sa už používa v systéme
vyhlásenie o hlavnej metóde:verejnosť statický void main (String [] args) {
hlavná metóda je a statická metóda to nevyžaduje, aby objekt existoval skôr, ako bude možné zavolať. Pretože main () je východiskovým bodom akejkoľvek aplikácie Java, v skutočnosti neexistujú žiadne objekty, ktoré by ju mohli volať. Ak by ste chceli mať program, ktorý sa neustále volá, môžete to urobiť:
verejná trieda StaticExample {
public static void main (String [] args) {
String [] s = {"random", "string"};
StaticExample.main (s);
}
}
Nie je to veľmi užitočné, ale všimnite si, ako možno volať metódu main () bez inštancie triedy StaticExample.
Čo je to statické pole?
Statické polia sú známe aj ako polia tried. Sú to jednoducho polia, ktoré majú vo svojich vyhláseniach statický modifikátor. Vráťme sa napríklad do triedy Item a pridajte statické pole:
položka verejnej triedy {
// static field uniqueId
private static int uniqueId = 1;
súkromné int itemId;
private String itemName;
verejná položka (String itemName)
{
this.itemName = itemName;
itemId = uniqueId;
UNIQUEID ++;
}
}
Polia itemId a itemName sú normálne nestatické polia. Po vytvorení inštancie triedy Item budú mať tieto polia hodnoty, ktoré sa nachádzajú vo vnútri objektu. Ak sa vytvorí iný objekt Item, bude mať tiež polia itemId a itemName na ukladanie hodnôt.
Unikátne statické pole však obsahuje hodnotu, ktorá bude rovnaká pre všetky objekty položky. Ak existuje 100 objektov, bude existovať 100 inštancií polí itemId a itemName, ale iba jedno jedinečné pole staticId.
Vo vyššie uvedenom príklade sa jedinečný identifikátor používa na pridelenie jedinečného čísla každému objektu položky. Je to ľahké, ak každý vytvorený objekt položky vezme aktuálnu hodnotu v statickom poli uniqueId a potom ju zvýši o jeden. Použitie statického poľa znamená, že každý objekt nemusí vedieť o ostatných objektoch, aby získal a unikátne ID. Môže to byť užitočné, ak chcete vedieť, v akom poradí boli objekty Item vytvorené.
Čo je statická konštanta?
Statické konštanty sú presne ako statické polia s tým rozdielom, že ich hodnoty nie je možné zmeniť. V poľnom vyhlásení: konečné a statický používajú sa modifikátory. Napríklad, trieda Item by mala uvaliť obmedzenie na dĺžku itemName. Mohli by sme vytvoriť statickú konštantu maxItemNameLength:
položka verejnej triedy {
súkromné statické číslo int = 1;
verejná statická konečná int maxItemNameLength = 20;
súkromné int itemId;
private String itemName;
verejná položka (String itemName)
{
if (itemName.length ()> maxItemNameLength)
{
this.itemName = itemName.substring (0,20);
}
inak
{
this.itemName = itemName;
}
itemId = id;
id ++;
} }
Rovnako ako v prípade statických polí sú statické konštanty spojené s triedou a nie s jednotlivými objektmi:
verejná trieda StaticExample {
public static void main (String [] args) {
Item catFood = nová položka („Whiskas“);
System.out.println (catFood.getItemName ());
System.out.println (Item.maxItemNameLength);
}
}
O statickej konštante maxItemNameLength si treba všimnúť dve dôležité veci:
- Vyhlasuje sa za verejné pole. Všeobecne je zlý nápad zverejniť pole v akejkoľvek triede, ktorú navrhujete, ale v tomto prípade na tom nezáleží. Hodnota konštanty sa nedá zmeniť.
- Statická konštanta sa používa z názvu triedy Item, nie z objektu Item.
Statické konštanty sú viditeľné v Java API. Napríklad celočíselná trieda obalov má dve, ktoré ukladajú maximálne a minimálne hodnoty int Dátový typ môže mať:
System.out.println ("Maximálna hodnota pre int je:" + Celé číslo. MAX_VALUE);
System.out.println ("Minimálna hodnota pre int je:" + Celé číslo. MIN_VALUE);
Výkon:
Maximálna hodnota pre int je: 2147483647
Minimálna hodnota pre int je: -2147483648