Понекад је корисно имати вриједности које се дијеле на све инстанце одређене класе. Статичка поља и статичке константе омогућите ову врсту дељења припадањем класа а не стварним објектима.
Статички модификатор
Обично се поља и методе дефинисани у класи могу користити само када је креиран објект тог типа класе. На пример, размотрите једноставну класу предмета која прати робу у продавници:
Предмет јавне класе {
привате Стринг итемНаме;
јавна ставка (Стринг итемНаме)
{
тхис.итемНаме = итемНаме;
}
јавни Стринг гетИтемНаме ()
{
ретурн итемНаме;
}
}
Да бисмо могли користити методу гетИтемНаме (), прво морамо креирати објект Итем, у овом случају цатФоод:
јавна класа СтатицЕкампле {
јавни статички воид маин (Стринг [] аргс) {
Ставка цатФоод = нова ставка ("Вхискас");
Систем.оут.принтлн (цатФоод.гетИтемНаме ());
}
}
Међутим, ако је статички модификатор укључен у декларацију поља или методе, ниједна инстанца класе није потребни за употребу поља или методе - они су повезани са класом, а не појединци објекта. Ако се осврнете на горњи пример, видећете да се статички модификатор већ користи у
декларација главне методе:јавни статички воид маин (Стринг [] аргс) {
Тхе главни метод је статичка метода за који није потребан објекат да постоји пре него што се он може назвати. Како је маин () почетна тачка за било коју Јава апликацију, у ствари већ не постоје објекти који би је могли позвати. Можете, ако вам се чини да желите да имате програм који се стално зове, урадите ово:
јавна класа СтатицЕкампле {
јавни статички воид маин (Стринг [] аргс) {
Стринг [] с = {"случајно", "стринг"};
СтатицЕкампле.маин (с);
}
}
Није баш корисно, али примјетите како се главна () метода може назвати без инстанције класе СтатицЕкампле.
Шта је статичко поље?
Статичка поља су такође позната као класа поља. То су једноставно поља која имају статички модификатор у својим декларацијама. На пример, вратимо се на класу предмета и додајмо статичко поље:
Предмет јавне класе {
// статичко поље уникуеИд
приватни статички инт уникуеИд = 1;
привате инт итемИд;
привате Стринг итемНаме;
јавна ставка (Стринг итемНаме)
{
тхис.итемНаме = итемНаме;
итемИд = јединствениИд;
уникуеИд ++;
}
}
Поља итемИд и итемНаме су нормална нестатичка поља. Када се створи инстанца класе предмета, ова поља ће имати вредности које се налазе унутар тог објекта. Ако се створи још један објект Итем, и он ће имати поља итемИд и итемНаме за чување вредности.
Међутим, статичко поље јединственог ИД-а садржи вредност која ће бити иста у свим објектима предмета. Ако постоји 100 предмета предмета, постојат ће 100 примјерака поља итемИд и итемНаме, али само једно јединствено статичко поље.
У горњем примјеру, јединственИд се користи да се сваком предмету предмета додијели јединствени број. То је лако учинити ако сваки предмет који се створи преузме тренутну вриједност у статичком пољу јединственог ИД-а, а затим га повећава за један. Употреба статичког поља значи да сваки објекат не мора знати за остале објекте да би добио уникатан ид. Ово би могло бити корисно ако желите знати редослијед којим су објекти предмета креирани.
Шта је статичка константа?
Статичке константе потпуно су сличне статичким пољима, осим што се њихове вриједности не могу мијењати. У декларацији на терену коначни и статички користе се модификатори. На примјер, можда би класа Итем требала наметнути ограничење на дужину именаНаме. Могли бисмо створити статичку константу макИтемНамеЛенгтх:
Предмет јавне класе {
приватни статички инт ид = 1;
јавни статички коначни инт макИтемНамеЛенгтх = 20;
привате инт итемИд;
привате Стринг итемНаме;
јавна ставка (Стринг итемНаме)
{
иф (итемНаме.ленгтх ()> макИтемНамеЛенгтх)
{
тхис.итемНаме = итемНаме.субстринг (0,20);
}
друго
{
тхис.итемНаме = итемНаме;
}
итемИд = ид;
ид ++;
} }
Као и код статичких поља, статичке константе су придружене класи, а не појединачном објекту:
јавна класа СтатицЕкампле {
јавни статички воид маин (Стринг [] аргс) {
Ставка цатФоод = нова ставка ("Вхискас");
Систем.оут.принтлн (цатФоод.гетИтемНаме ());
Систем.оут.принтлн (Итем.макИтемНамеЛенгтх);
}
}
У вези са макИтемНамеЛенгтх статичком константом треба приметити две важне ствари:
- Проглашена је као јавно поље. Генерално је лоша идеја јавно објавити у било којој класи коју дизајнирате, али у овом случају није важно. Вредност константе не може се мењати.
- Статичка константа користи се од назива класе Итем, а не од предмета Итем.
Статичке константе могу се видети широм Јава АПИ-ја. На пример, тхе интегер класа омота има две које чувају максималне и минималне вредности инт тип података могу имати:
Систем.оут.принтлн ("Максимална вредност за инт је:" + Интегер. МАКС_ВАЛУЕ);
Систем.оут.принтлн ("Минимална вредност за инт је:" + Интегер. МИН_ВАЛУЕ);
Излаз:
Максимална вредност за инт је: 2147483647
Минимална вредност за инт је: -2147483648