Kartais gali būti naudinga turėti vertes, kurios būtų bendrinamos visais tam tikros klasės egzemplioriais. Statiniai laukai ir statinės konstantos įgalinti tokio tipo dalijimąsi priklausant klasė o ne prie realių objektų.
Statinis modifikatorius
Paprastai klasėje apibrėžti laukai ir metodai gali būti naudojami tik sukūrus tos klasės tipo objektą. Pavyzdžiui, apsvarstykite paprastą Prekių klasę, kuri seka prekes parduotuvėje:
viešosios klasės daiktas {
privatus stygos itemName;
viešas elementas (eilutės elemento pavadinimas)
{
this.itemName = itemName;
}
vieša eilutė getItemName ()
{
grąžinti prekės pavadinimą;
}
}
Norėdami naudoti metodą getItemName (), pirmiausia turime sukurti „Object“ objektą, šiuo atveju, „catFood“:
viešos klasės „StaticExample“ {
public static void main (stygos [] args) {
Prekė catFood = nauja prekė („Whiskas“);
System.out.println (catFood.getItemName ());
}
}
Tačiau jei statinis modifikatorius yra įtrauktas į lauko ar metodo deklaraciją, joks klasės egzempliorius nėra reikalingi norint naudoti lauką ar metodą - jie yra susieti su klase, o ne su asmeniu objektas. Jei pažvelgsite į aukščiau pateiktą pavyzdį, pamatysite, kad statinis modifikatorius jau yra naudojamas
pagrindinio metodo deklaracija:viešai statinis void main (stygos [] args) {
pagrindinis metodas yra statinis metodas tam nereikia objekto egzistuoti, kad jį būtų galima pavadinti. Kadangi pagrindinis () yra bet kurios „Java“ programos pradinis taškas, iš tikrųjų nėra objektų, kurie ją vadintų. Jei jautėtės turėjęs programą, kuri nuolatos vadina save, galėtumėte tai padaryti:
viešos klasės „StaticExample“ {
public static void main (stygos [] args) {
Styga [] s = {"atsitiktinė", "styga"};
StaticExample.main (-ai);
}
}
Nelabai naudinga, tačiau atkreipkite dėmesį, kaip pagrindinis () metodas gali būti vadinamas be „StaticExample“ klasės egzemplioriaus.
Kas yra statinis laukas?
Statiniai laukai taip pat žinomi kaip klasės laukai. Tai tiesiog laukai, kurių deklaracijose yra statinis modifikatorius. Pvz., Grįžkime į elementų klasę ir pridėkime statinį lauką:
viešosios klasės daiktas {
// statinis laukas unikalusId
privatus statinis int unikalusId = 1;
private int itemId;
privatus stygos itemName;
viešas elementas (eilutės elemento pavadinimas)
{
this.itemName = itemName;
itemId = unikalusId;
unikalusId ++;
}
}
Laukai „itemId“ ir „itemName“ yra normalūs nestatiniai laukai. Kai sukuriamas elemento klasės egzempliorius, šie laukai turės reikšmes, kurios bus laikomos to objekto viduje. Jei bus sukurtas kitas objektas Objektas, jis taip pat turės laukus itemId ir itemName vertėms saugoti.
Tačiau „unikalus ID“ statinis laukas turi vertę, kuri bus vienoda visuose „Objekto“ objektuose. Jei yra 100 „Objekto“ objektų, bus 100 „itemId“ ir „itemName“ laukų egzempliorių, bet tik vienas „unikalus ID“ statinis laukas.
Aukščiau pateiktame pavyzdyje „individualId“ yra naudojamas kiekvienam prekės elementui suteikti unikalų numerį. Tai lengva padaryti, jei kiekvienas sukurtas objekto objektas statiniame lauke „unikalus ID“ įgauna dabartinę vertę ir ją padidina vienetu. Statinio lauko naudojimas reiškia, kad norint gauti a, kiekvienam objektui nereikia žinoti apie kitus objektus unikalus ID. Tai gali būti naudinga, jei norėtumėte žinoti, kokia tvarka buvo sukurti elementai „punktas“.
Kas yra statinė konstanta?
Statinės konstantos yra visiškai panašios į statinius laukus, išskyrus tai, kad jų vertės negalima pakeisti. Lauko deklaracijoje galutinis ir statinis naudojami abu modifikatoriai. Pavyzdžiui, galbūt „Elementų klasė“ turėtų nustatyti „itemName“ ilgio apribojimą. Galėtume sukurti statinį konstantą „maxItemNameLength“:
viešosios klasės daiktas {
privatus statinis int id = 1;
viešas statinis galutinis int maxItemNameLength = 20;
private int itemId;
privatus stygos itemName;
viešas elementas (eilutės elemento pavadinimas)
{
if (itemName.length ()> maxItemNameLength)
{
this.itemName = itemName.substring (0,20);
}
Kitas
{
this.itemName = itemName;
}
itemId = id;
id ++;
} }
Kaip ir statiniai laukai, statinės konstantos yra susijusios su klase, o ne su atskiru objektu:
viešos klasės „StaticExample“ {
public static void main (stygos [] args) {
Prekė catFood = nauja prekė („Whiskas“);
System.out.println (catFood.getItemName ());
„System.out.println“ („Product.maxItemNameLength“);
}
}
Apie „maxItemNameLength“ statinę konstantą reikia atkreipti dėmesį į du svarbius dalykus:
- Jis paskelbtas viešuoju lauku. Paprastai bloga idėja paskelbti lauką bet kurioje jūsų klasėje, tačiau šiuo atveju tai nesvarbu. Konstantos vertės pakeisti negalima.
- Statinė konstanta naudojama iš klasės pavadinimo Objektas, o ne Objekto objektas.
Statines konstantas galima pamatyti visoje „Java“ API. Pavyzdžiui, sveikasis skaičius įvyniojimo klasė turi dvi, kurios saugo maksimalią ir mažiausią reikšmes int duomenų tipas gali turėti:
System.out.println („Didžiausia int reikšmė yra:“ + sveikasis skaičius. MAX_VALUE);
System.out.println („Min. Int reikšmė yra:“ + sveikasis skaičius. MIN_VALUE);
Išėjimas:
Didžiausia int vertė: 2147483647
Minimali int reikšmė: -2147483648