Kā darbojas statiskie lauki Java

Var būt reizes, ka ir noderīgi, ja vērtības ir kopīgas visiem noteiktas klases gadījumiem. Statiskie lauki un statiskās konstantes iespējot šāda veida kopīgošanu, piederot klase nevis uz faktiskajiem objektiem.

Statiskais modifikators

Parasti klasē noteiktos laukus un metodes var izmantot tikai tad, kad ir izveidots attiecīgā klases tipa objekts. Piemēram, apsveriet vienkāršu priekšmetu klasi, kas uzskaita preces veikalā:

 sabiedriskās klases prece {

 privāta virkne itemName;


 publisks vienums (stīgas vienības nosaukums)

 {

 this.itemName = itemName;

 }


 publiskā virkne getItemName ()

 {

 atgriezt itemName;

 }

 } 

Lai varētu izmantot metodi getItemName (), vispirms jāizveido objekts Objekts, šajā gadījumā - catFood:

 sabiedriskās klases StaticExample {


 public static void main (stīgas [] args) {

 Vienība catFood = jauna prece ("Whiskas");

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

 }

 } 

Tomēr, ja statiskais modifikators ir iekļauts lauka vai metodes deklarācijā, klases klases nav nepieciešami lauka vai metodes izmantošanai - tie ir saistīti ar klasi, nevis ar indivīdu objekts. Ja atskatīsities uz iepriekš minēto piemēru, redzēsit, ka statiskais modifikators jau tiek izmantots

instagram viewer
galvenās metodes deklarēšana:

 publiski statisks tukšs galvenais (stīgas [] args) { 

galvenā metode ir statiskā metode tas neprasa objekta pastāvēšanu, pirms to nevar izsaukt. Tā kā galvenā () ir jebkuras Java lietojumprogrammas sākumpunkts, faktiski nav neviena objekta, kas to izsauktu. Ja jums šķita, ka jums ir programma, kas sevi pastāvīgi sauc, jūs varētu rīkoties šādi:

 sabiedriskās klases StaticExample {


 public static void main (stīgas [] args) {


 Stīga [] s = {"izlases veidā", "virkne"};

 StaticExample.main (s);

 }

 }


Nav ļoti noderīga, taču ievērojiet, kā galveno () metodi var izsaukt bez StaticExample klases gadījuma.

Kas ir statiskais lauks?

Statiskos laukus sauc arī par klases laukiem. Tie ir vienkārši lauki, kuru deklarācijās ir statiskais modifikators. Piemēram, atgriezīsimies priekšmetu klasē un pievienosim statisko lauku:

 sabiedriskās klases prece {


 // statiskais lauks unikālsId

 privāts statisks int unikālsId = 1;


 privāts int itemId;

 privāta virkne itemName;


 publisks vienums (stīgas vienības nosaukums)

 {

 this.itemName = itemName;

 itemId = unikālsId;

 unikālsId ++;

 }

 }


Lauki itemId un itemName ir normāli nestatiski lauki. Kad tiek izveidots vienības klases eksemplārs, šiem laukiem būs vērtības, kas tiek turētas šajā objektā. Ja tiek izveidots cits vienums Objekts, tam arī būs lauki itemId un itemName vērtību glabāšanai.

Statiskajam laukam uniqueId tomēr ir vērtība, kas būs vienāda visiem objekta objektiem. Ja ir 100 vienumu objekti, laukos itemId un itemName būs 100 gadījumi, bet tikai viens statiskā lauka unikalId.

Iepriekšminētajā piemērā uniqueId tiek izmantots, lai katram objektam piešķirtu unikālu numuru. Tas ir viegli izdarāms, ja katrs izveidotais vienuma objekts statiskā laukā uniId uzņem pašreizējo vērtību un pēc tam to palielina par vienu. Statiskā lauka izmantošana nozīmē, ka katram objektam nav jāzina par citiem objektiem, lai iegūtu a unikāls id. Tas varētu būt noderīgi, ja vēlaties uzzināt posteņa Objektu izveides secību.

Kas ir statiskā konstante?

Statiskās konstantes ir tieši tādas pašas kā statiskie lauki, izņemot to, ka to vērtības nevar mainīt. Lauka deklarācijā fināls un statisks tiek izmantoti gan modifikatori. Piemēram, iespējams, vienuma klasei vajadzētu uzlikt itemName garuma ierobežojumu. Mēs varētu izveidot nemainīgu konstantu maxItemNameLength:

 sabiedriskās klases prece {


 privāti statiski int id = 1;

 publiski statisks galīgais int maxItemNameLength = 20;


 privāts int itemId;

 privāta virkne itemName;


 publisks vienums (stīgas vienības nosaukums) 

 {

 if (itemName.length ()> maxItemNameLength)

 {

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

 }

 cits

 {

 this.itemName = itemName;

 }

 itemId = id;

 id ++;

 } } 

Tāpat kā ar statiskiem laukiem, statiskās konstantes ir saistītas ar klasi, nevis ar atsevišķu objektu:

 sabiedriskās klases StaticExample {


 public static void main (stīgas [] args) {


 Vienība catFood = jauna prece ("Whiskas");

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

 System.out.println (Item.maxItemNameLength);

 }

 }


Par statisko konstantu maxItemNameLength ir jāņem vērā divas svarīgas lietas:

  • Tas tiek deklarēts kā publisks lauks. Parasti ir slikta ideja publiskot lauku jebkurā klasē, kuru projektējat, taču šajā gadījumā tam nav nozīmes. Konstantes vērtību nevar mainīt.
  • Statiskā konstante tiek izmantota no klases nosaukuma Vienums, nevis objekts Objekts.

Statiskās konstantes var redzēt visā Java API. Piemēram, vesels skaitlis iesaiņojuma klase ir divas, kas saglabā maksimālo un minimālo vērtību int datu tips var piederēt:

 System.out.println ("Int maksimālā vērtība ir:" + vesels skaitlis. MAX_VALUE);

 System.out.println ("Int minimālā vērtība int ir:" + vesels skaitlis. MIN_VALUE);


 Izeja:

 Int maksimālā vērtība ir: 2147483647

 Int minimālā vērtība ir: -2147483648