Hogyan működnek a statikus mezők a Java-ban

click fraud protection

Időnként hasznos lehet olyan értékeket megosztani, amelyek egy adott osztály összes példányán megoszlanak. Statikus mezők és statikus állandók engedélyezze az ilyen típusú megosztást a osztály és nem a tényleges tárgyakhoz.

A statikus módosító

Általában az osztályban definiált mezők és módszerek csak akkor használhatók, ha az adott osztálytípus objektuma létrehozásra került. Vegyünk például egy egyszerű cikkosztályt, amely nyomon követi az árukat a boltban:

 nyilvános osztályú elem {

 private String itemName;


 nyilvános elem (karakterlánc elemnév)

 {

 this.itemName = itemName;

 }


 nyilvános karakterlánc getItemName ()

 {

 return itemName;

 }

 } 

A getItemName () módszer használatához először létre kell hoznunk egy Object objektumot, ebben az esetben a catFood:

 nyilvános osztály StaticExample {


 nyilvános statikus void main (karakterlánc [] args) {

 Cikk catFood = új tétel ("Whiskas");

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

 }

 } 

Ha azonban a statikus módosító szerepel egy mezőben vagy a módszer deklarációjában, akkor az osztály egyetlen példánya sem A mező vagy a módszer használatához szükséges - az osztályhoz vannak társítva, és nem az egyénhez tárgy. Visszatekintve a fenti példára, látni fogja, hogy a statikus módosítót már használják a

instagram viewer
fő módszer deklarálása:

 nyilvános statikus void main (karakterlánc [] args) { 

Az fő módszer egy statikus módszer ehhez nem szükséges, hogy egy objektum létezzen, mielőtt meg lehetne nevezni. Mivel a main () a Java alkalmazások kiindulópontja, valójában még nem léteznek olyan objektumok, amelyek hívnák. Ha úgy érezte, hogy van egy programja, amely folyamatosan hívja magát, akkor ezt megteheti:

 nyilvános osztály StaticExample {


 nyilvános statikus void main (karakterlánc [] args) {


 Karakterlánc [] s = {"véletlenszerű", "karakterlánc"};

 StaticExample.main (s);

 }

 }


Nem túl hasznos, de vegye figyelembe, hogy a main () metódust hogyan lehet meghívni StaticExample osztály példánya nélkül.

Mi a statikus mező?

A statikus mezőket osztálymezőknek is nevezzük. Ezek egyszerűen olyan mezők, amelyeknek statikus módosítója van a deklarációkban. Például térjünk vissza az elem osztályhoz, és adjunk hozzá egy statikus mezőt:

 nyilvános osztályú elem {


 // statikus mező egyediId

 magán statikus int uniqueId = 1;


 magán int elemId;

 private String itemName;


 nyilvános elem (karakterlánc elemnév)

 {

 this.itemName = itemName;

 itemId = uniqueId;

 UniqueID ++;

 }

 }


Az itemId és itemName mezők normál, nem statikus mezők. Amikor létrehoz egy elem osztályt, ezeknek a mezőknek az értékei vannak, amelyeket az adott objektumban tartanak. Ha másik elemobjektumot hoznak létre, akkor az itemId és itemName mezőkkel is rendelkezik az értékek tárolására.

Az individualId statikus mező azonban olyan értéket tartalmaz, amely megegyezik az összes elemobjektumban. Ha 100 elemobjektum létezik, akkor az itemId és itemName mezőknek 100 példánya lesz, de csak egy egyediId statikus mező.

A fenti példában az individualId-t arra használják, hogy minden elem-objektumhoz egyedi számot adjon. Ezt könnyű megtenni, ha minden létrehozott elemobjektum megkapja az aktuális értéket a individualId statikus mezőben, majd eggyel növeli. A statikus mező használata azt jelenti, hogy minden objektumnak nem kell tudnia a többi objektumról az a eléréséhez egyéni azonosító. Ez hasznos lehet, ha meg akarja tudni, hogy az Elem objektumok milyen sorrendben készültek.

Mi a statikus állandó?

A statikus állandók pontosan olyanok, mint a statikus mezők, azzal az eltéréssel, hogy értéküket nem lehet megváltoztatni. A terepi nyilatkozatban a végső és statikus mind a módosítókat használják. Például, az elem osztálynak korlátozást kellene előírnia az itemName hosszára. Megadhatunk egy statikus állandó maxItemNameLength értéket:

 nyilvános osztályú elem {


 magán statikus int id = 1;

 nyilvános statikus végleges int maxItemNameLength = 20;


 magán int elemId;

 private String itemName;


 nyilvános elem (karakterlánc elemnév) 

 {

 if (itemName.length ()> maxItemNameLength)

 {

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

 }

 más

 {

 this.itemName = itemName;

 }

 itemId = id;

 id ++;

 } } 

A statikus mezőkhez hasonlóan a statikus állandók az osztályhoz, nem pedig az egyes objektumokhoz vannak társítva:

 nyilvános osztály StaticExample {


 nyilvános statikus void main (karakterlánc [] args) {


 Cikk catFood = új tétel ("Whiskas");

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

 System.out.println (Item.maxItemNameLength);

 }

 }


Két fontos dolgot kell észrevenni a maxItemNameLength statikus állandóval kapcsolatban:

  • Nyilvános terepnek nyilvánítják. Általában rossz ötlet a tereptárgyak közzététele bármelyik megtervezett osztályban, de ebben az esetben nem számít. Az állandó értéke nem változtatható meg.
  • A statikus állandót az elemnévből kell használni, nem pedig egy elemobjektumból.

A statikus állandók a Java API-ban láthatók. Például a egész csomagoló osztály kettő tárolja a maximális és minimális értéket egy int adattípus lehet:

 System.out.println ("Az int maximális értéke:" + Egész szám. MAX_VALUE);

 System.out.println ("Az int minimális értéke:" + Egész szám. MIN_VALUE);


 Kimenet:

 Az int maximális értéke: 2147483647

 Az int minimális értéke: -2147483648


instagram story viewer